数组列表中数组的存在

时间:2014-10-03 00:01:59

标签: python numpy

我正在尝试检查数组列表中是否存在数组。我的问题可以归结为下面的例子:

>>> 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

3 个答案:

答案 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也可以是多维的,因此您可以在单个矢量化语句中测试多个值的存在。

要知道当前接受的答案不能产生明确的结果。