Python 检查列表(numpy数组)中的所有项是否相等
我的程序中有一个函数,需要检查并确保列表中的所有项(都是numpy数组)相等。执行此操作的if语句以开头Python 检查列表(numpy数组)中的所有项是否相等,python,arrays,numpy,if-statement,equality,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()
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
很抱歉没有包括在内,我们试图使问题尽可能小。您似乎没有正确使用
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!')
您似乎没有正确使用
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!')
不幸的是,我没有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");
希望有帮助 不幸的是,我没有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");
希望有帮助 正如@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")
如果打印布尔表达式的值:
print(y<=1.0)
因此,如下更新if
条件可以使程序工作
if np.all(y <= 1.0):
print ("ok")
正如@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")
如果打印布尔表达式的值:
print(y<=1.0)
因此,如下更新if
条件可以使程序工作
if np.all(y <= 1.0):
print ("ok")
不幸的是,这不能回答OP的问题!!不幸的是,这不能回答OP的问题!!你能分享更多你的代码吗?@WasiAhmad,请看编辑。为什么会有反对票(我如何改进这个问题)?@heather你是想表明列表中的所有数组都是相等的吗?或者您是在试图证明两个列表中的所有数组都是相等的?
len()
试图达到什么目的?@Praveen,len()
是个相当糟糕的主意,因为我从另一个SO答案中提取了它,而不知道发生了什么,但它做广告表明列表中的所有项都是相等的。我试图表明列表中的所有数组都是相等的。你能分享更多的代码吗?@WasiAhmad,请参阅编辑。为什么会有反对票(我如何改进这个问题)?@heather你想表明列表中的所有数组都是相等的吗?或者您是在试图证明两个列表中的所有数组都是相等的?len()
试图达到什么目的?@Praveen,len()
是个相当糟糕的主意,因为我从另一个SO答案中提取了它,而不知道发生了什么,但它做广告表明列表中的所有项都是相等的。我试图证明列表中的所有数组都是相等的。谢谢你的回答,它消除了我的一些误解。我接受了@Praveen's,因为它明确回答了我的问题,但你的回答也帮助了我。再次感谢大家,+谢谢你的回答,它消除了我的一些误解。我接受了@Praveen's,因为它明确回答了我的问题,但你的回答也帮助了我。再次感谢大家,+1.