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

时间:2014-08-22 16:23:02

标签: python arrays numpy

我有一个特定的整数值k,我想在2d 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]

我总是得到一个关于具有多个元素的数组的真值的ValueError,这是不明确的。我明白问题出在&#34; int(n)== k&#34;,但是 我想知道我哪里错了,我怎样才能把事情做得更好,让我的代码部分工作。

2 个答案:

答案 0 :(得分:3)

好吧,考虑一下:

  1. 无论何时使用numpy,您可能都不想使用for循环
  2. 您获得的错误意味着您正在将numpy数组与单个值进行比较
  3. 因此,问题的一个可能解决方案可能是:

    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位置获得该数组的值。

答案 1 :(得分:0)

我通过将pick列表定义从pick = [np.random.random_integers(200, size=(n_cl))]更改为pick = np.random.random_integers(200, size=(n_cl))来解决了我的问题。

出现问题是因为我一直在将数组值与整数值进行比较。