首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查列表中的所有项(numpy数组)是否相等

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

Stack Overflow用户
提问于 2017-03-12 23:41:05
回答 3查看 647关注 0票数 1

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

代码语言:javascript
复制
if np.array_equal(qstatnum[gatnum].count(qstatnum[gatnum][0]), len(qstatnum[gatnum])) == True:

这一行给出了错误

代码语言:javascript
复制
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我不知道问题出在哪里。任何帮助都将不胜感激。谢谢!

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

代码语言:javascript
复制
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

抱歉,不包括在内,是试图使问题尽可能小。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-12 23:47:13

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

如果l1l2是数组的两个列表,那么您可能需要如下所示:

代码语言:javascript
复制
if all(np.array_equal(i, j) for i, j in zip(l1, l2)):
    # Do something

例如,

代码语言:javascript
复制
>>> 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

编辑

如果您试图显示列表中的所有数组是相等的,那么您只需显示所有数组都等于第一个数组:

代码语言:javascript
复制
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!')
票数 2
EN

Stack Overflow用户

发布于 2017-03-13 00:00:47

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

由于您没有提供代码,所以我无法解释您为什么会收到此错误。但我在这里分享一个简单的,让你知道错误的含义。

示例:

代码语言:javascript
复制
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") 

此程序将产生以下错误。

代码语言:javascript
复制
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

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

代码语言:javascript
复制
print(y<=1.0)

印出来了-

代码语言:javascript
复制
[True True False False]

因此,更新if条件,如下所示,使程序工作。

代码语言:javascript
复制
if np.all(y <= 1.0):
    print ("ok")

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

代码语言:javascript
复制
if np.all(np.array_equal(qstatnum[gatnum].count(qstatnum[gatnum][0]), len(qstatnum[gatnum]))) == True:
票数 1
EN

Stack Overflow用户

发布于 2017-03-12 23:50:29

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

代码语言:javascript
复制
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");

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42754543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档