检查列表中的所有项目(numpy数组)是否相等

时间:2017-03-12 23:41:06

标签: python arrays numpy if-statement equality

我的程序中有一个函数需要检查并确保列表中的所有项(都是numpy数组)相等。执行此操作的if语句以

开头
if np.array_equal(qstatnum[gatnum].count(qstatnum[gatnum][0]), len(qstatnum[gatnum])) == True:

此行显示错误

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我不确定问题是什么。任何帮助,将不胜感激。谢谢!

编辑: 每个请求,代码中的完整if-else语句

if np.array_equal(qstatnum[gatnum].count(qstatnum[gatnum][0]), len(qstatnum[gatnum])) == True:
    if np.array_equal(qstatnum[gatnum][0], [0,1]) == True:
        return qstat
    elif np.array_equal(qstatnum[gatnum][0], [1,0]) == True:
        return singates[typegat2](qstat)
    else:
        print("superposition not yet implemented")
else:
    return qstat

道歉,不包括,试图让问题尽可能小。

3 个答案:

答案 0 :(得分:1)

您似乎无法正确使用array_equalarray_equal的输入必须是数组,而您似乎正在传递len的某个数字,这是一个数字......

如果l1l2是您的两个数组列表,那么您可能正在寻找类似的内容:

if all(np.array_equal(i, j) for i, j in zip(l1, l2)):
    # Do something

例如,

>>> l1 = [np.arange(3), np.arange(5)]
>>> l2 = [np.r_[0:3], np.r_[0:5]]
>>> if all(np.array_equal(i, j) for i, j in zip(l1, l2)):
...     print('yes')
...     
yes

修改

如果您尝试显示列表中的所有数组彼此相等,那么您可以显示所有数组都与第一个数组相同:

l = [np.arange(3), np.arange(3), np.arange(3)]
if all(np.array_equal(i, l[0]) for i in l[1:]):
    print('All equal!')

答案 1 :(得分:1)

正如@Praveen已经提到的,看起来你只想比较两个数字!如果是这种情况,那么您不需要使用numpy.array_equal()

由于您没有提供代码,我无法解释您收到此错误的原因。但我在这里分享一个简单的例子,让你知道这个错误意味着什么。

示例:

x = np.arange(0, 2, 0.5)
print(x) # [ 0.   0.5  1.   1.5]
y = 2*x
print(y) # [ 0.  1.  2.  3.]

if y <= 1.0:
    print ("ok") 

此程序出现以下错误。

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

如果打印布尔表达式的值:

print(y<=1.0)

打印 -

[True True False False]

因此,如下更新if条件会使程序正常工作。

if np.all(y <= 1.0):
    print ("ok")

所以,我想,你可以做这样的事情来解决你的问题。

if np.all(np.array_equal(qstatnum[gatnum].count(qstatnum[gatnum][0]), len(qstatnum[gatnum]))) == True:

答案 2 :(得分:0)

不幸的是,我没有numpy,但这里是我如何检查列表中的所有项目是否相等。

for i in range(len(arr)):
for j in range(i+1, len(arr)):
    if arr[i] != arr[j]:
        print ("items are not all equal");

希望有所帮助。