我正在尝试以下代码来检查numpy数组的元素是否在另一个'b'列表中找到但是我得到以下错误
The truth value of an array with more than one element is ambiguous.
Use a.any() or a.all()
我试过查找但无法让它工作
如何在这个例子中使用a.all()或其他方法,如numpy.logical_and
import numpy as np
a=np.array([[0,0,0,0,1,0,1,1,0],[0,0,0,0,0,1,1,1,0],[0,0,0,0,0,0,1,1,1]])
b=[]
for item in a :
if item not in b:
b.append(item)`
答案 0 :(得分:3)
没有循环:
b = np.unique(a, axis=0)
这快了几个数量级,而且更加清晰。
答案 1 :(得分:1)
@John Zwinck提供的解决方案可能是此问题的最佳解决方案。如果出于某种原因,我必须使用它来评论循环方法。
循环方法的问题是in
和数组测试相等的方式。
Grosso modo,item in b
使用相等(item
)将b
与==
中的元素进行比较。类似的东西:
def in(x, y):
for item in y:
# Notice the use of == to compare two arrays, the result is an array of bool.
if x == item:
return True
return False
因此,如果一个人不能使用np.unique并且明确需要使用循环,那么实现in
的变体来比较两个数组。
import numpy as np
a=np.array([[0,0,0,0,1,0,1,1,0],
[0,0,0,0,0,1,1,1,0],
[0,0,0,0,0,0,1,1,1]])
b=[]
def in_for_arrays(x, y):
for item in y:
# Two arrays are equal if ALL the elements are equal.
if (x == item).all():
return True
return False
for item in a:
if not in_for_arrays(item, b):
b.append(item)