Python:在数组列中查找特定值

2 投票
2 回答
5705 浏览
提问于 2025-04-18 18:12

我有一个特定的整数值 k,我想在一个二维的numpy数组的某一列中找到匹配的值(使用“for”循环)。我想我可以用一个 if 语句,直接把单个数组元素和整数值 k 进行比较。以下是我的代码:

for i in range(mock.shape[0]):

    n_cl = int(mock[i,0]/3500.)
    zcl = mock[i,5]
    pick = [np.random.random_integers(200, size=(n_cl))]
    print pick[0]   
    if(zcl <= 0.05):

        for k in range(len(pick)) :

            for j in range(z_001.shape[0]):
                n = z_001[j,1]
                if (int(n) == pick[k]):
                    binaries[j,7] = mock[i,0]   
                    binaries[j,8] = mock[i,1]
                    binaries[j,9] = mock[i,2]
                    binaries[j,10] = mock[i,3]
                    binaries[j,11] = mock[i,4]

但是我总是遇到一个值错误,提示说数组的真值对于多个元素来说是模糊的。我明白问题出在“ int(n) == k”这部分,但我想知道我哪里出错了,应该怎么改进才能让这部分代码正常工作。

2 个回答

0

我解决了我的问题,方法是把 pick 列表的定义从 pick = [np.random.random_integers(200, size=(n_cl))] 改成 pick = np.random.random_integers(200, size=(n_cl))

问题出现的原因是我把一个数组的值和一个整数的值进行了比较。

3

好吧,考虑一下:

  1. 当你使用numpy的时候,通常不想用for循环。
  2. 你遇到的错误是因为你在把一个numpy数组和一个单独的值进行比较。

所以,解决这个问题的一个方法可能是:

import numpy as np

# generating some fake data
x = np.repeat([[1,2,3,4]], 4, axis=0) 
x[2,2] = 200
x[3,1] = 200

# retrieving the indices where "x==200" using np.where
indices = np.where(x==200)
print indices

这样会得到:

(array([2, 3]), array([2, 1]))

这样你可以用indices来索引任何其他形状合适的数组, 这样你就能得到那个数组在indices位置上的值。

撰写回答