我最近开始在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)
答案 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)