我正在尝试检查数组列表中是否存在数组。我的问题可以归结为下面的例子:
>>> import numpy as np
>>> a = np.array([1,2,3])
>>> b = np.array([4,5,6])
>>> c = [a,b]
>>> c
[array([1, 2, 3]), array([4, 5, 6])]
>>> a in c
True
>>> np.array([1,2,3]) in c
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> d = np.array([1,2,3])
>>> d in c
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
如何检查数组列表中是否存在数组?当我使用常规列表时,这可以正常工作:
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [a,b]
>>> [1,2,3] in c
True
>>> [4,5,6] in c
True
>>> [1,2] in c
False
>>> d = [1,2,3]
>>> d in c
True
答案 0 :(得分:2)
易
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.array([a,b]) # < ---- this line!
print repr(c)
print a in c
print np.array([1,2,3]) in c
print [1,2,3] in c # Success!!!
print np.array([1,2,3]).tolist() in c# also success!!!
答案 1 :(得分:2)
Joran的解决方案很好,因为它可以让您使用您可能想要使用的直观in
功能。
但是,如果由于某种原因您无法将c
的类型更改为np.array
,则此函数将使用a
的原始数据类型解决您的问题,{{1 }和b
:
c
答案 2 :(得分:0)
numpy_indexed包(免责声明:我是它的作者)可用于以一种简单的方式解决这个问题:
import numpy_indexed as npi
npi.contains(c, a)
请注意,它不涉及对python类型的任何强制转换,并且不使用python循环,因此在使用实际大小的数组时可以期望它更有效。 &#39; a&#39; array也可以是多维的,因此您可以在单个矢量化语句中测试多个值的存在。
要知道当前接受的答案不能产生明确的结果。