import numpy as np
a = np.eye(2)
b = np.array([1,1],[0,1])
my_list = [a, b]
a in my_list
返回true
,但b in my_list
返回“ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all( )”。我可以通过首先将数组转换为字符串或列表来解决这个问题,但是有更好的(更多Pythonic)方法吗?
答案 0 :(得分:3)
问题是,在numpy中,==
运算符返回一个数组:
>>> a == b
array([[ True, False],
[ True, True]], dtype=bool)
使用 .array_equal()
将数组与纯布尔值进行比较。
>>> any(np.array_equal(a, x) for x in my_list)
True
>>> any(np.array_equal(b, x) for x in my_list)
True
>>> any(np.array_equal(np.array([a, a]), x) for x in my_list)
False
>>> any(np.array_equal(np.array([[0,0],[0,0]]), x) for x in my_list)
False
答案 1 :(得分:-1)
有关此问题的详细信息。如果您使用
形成my_listmy_list = [b,a]
失败的是......有趣的问题。