我的程序中有一个函数需要检查并确保列表中的所有项(都是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
道歉,不包括,试图让问题尽可能小。
答案 0 :(得分:1)
您似乎无法正确使用array_equal
。 array_equal
的输入必须是数组,而您似乎正在传递len
的某个数字,这是一个数字......
如果l1
和l2
是您的两个数组列表,那么您可能正在寻找类似的内容:
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");
希望有所帮助。