我的程序中有一个函数,需要检查并确保列表中的所有项(都是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抱歉,不包括在内,是试图使问题尽可能小。
发布于 2017-03-12 23:47:13
您似乎没有正确地使用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!')发布于 2017-03-13 00:00:47
正如@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:发布于 2017-03-12 23:50:29
不幸的是,我没有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");希望这能有所帮助。
https://stackoverflow.com/questions/42754543
复制相似问题