检查索引处的numpy数组的值

时间:2018-12-10 19:57:08

标签: python arrays numpy indexing

我最近开始在numpy工作。我正在尝试测试2d数组是否包含特定的子数组。下面的代码返回错误。我该如何解决?

import numpy as np

testArray = np.array([[None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0]])

for i in range(len(testArray)):
    if (testArray[i] == [None, 0]):
        print(i)

3 个答案:

答案 0 :(得分:1)

无需迭代,您可以使用全部:

>>> testArray[(testArray == [None,0]).all(1)]
array([[None, 0],
       [None, 0],
       [None, 0],
       [None, 0],
       [None, 0],
       [None, 0],
       [None, 0],
       [None, 0]], dtype=object)

或者,如果您只想查看该子数组是否存在,请另外使用any

>>> (testArray == [None,0]).all(1).any()
True

答案 1 :(得分:0)

您看到的错误是值错误。比较numpy数组时,将得到一个由布尔值组成的数组。问题是您使用该数组作为条件,这导致值错误,因为数组的真值不明确。您可以使用.any.all进行解析,具体取决于您是否关心数组中是否存在所有元素。

尝试一下:

testArray = np.array([[None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0]]) 

for i in range(len(testArray)): 
    containsValue = (testArray[i] == [None, 0]).all()
    if (containsValue): 
        print(i) 

答案 2 :(得分:0)

好吧,您的[[None,0]]之一是要与没有太大意义的数组进行比较的列表。 因此,如果您想修改代码,则可以通过以下方式访问值:

import numpy as np

testArray = np.array([[None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0]])

for i in range(len(testArray)):
    if (testArray[i][0] == None and testArray[i][1] == 0):
        print(i)