查找列表中的numpy数组索引

问题描述:

有人可以解释为什么会出现以下情况吗?我的用例是我有一个python列表,其元素都是numpy的ndarray对象,我需要搜索列表以查找特定ndarray obj的索引。查找列表中的numpy数组索引

最简单的例子:

>>> import numpy as np 
>>> a,b = np.arange(0,5), np.arange(1,6) 
>>> a 
array([0, 1, 2, 3, 4]) 
>>> b 
array([1, 2, 3, 4, 5]) 
>>> l = list() 
>>> l.append(a) 
>>> l.append(b) 
>>> l.index(a) 
0 
>>> l.index(b) 
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() 

为什么l找到a的指标,但不是b

+0

什么是这个代码怎么回事? – WuJo

+3

通常,当您尝试在'numpy'布尔数组(或列表)上执行Python布尔操作('in','if')时会出现此错误。例如'如果[真,假......]:'。在这里,我怀疑一个'index'匹配id,另一个尝试'=='测试。似乎取决于列表的构建方式。 – hpaulj

+0

涉及'numpy'数组的列表索引操作可能不是一个好主意。 – hpaulj

应用在https://*.com/a/17703076/901925想法(见相关sidebare)

[np.array_equal(b,x) for x in l].index(True) 

应更可靠。它确保了一个正确的数组到数组的比较。

[id(b)==id(x) for x in l].index(True)如果你想确保它比较ids。

的想法是numpy的数组转换成列表和改造问题在其他列表中找到一个列表:

def find_array(list_of_numpy_array,taregt_numpy_array): 
    out = [x.tolist() for x in list_of_numpy_array].index(taregt_numpy_array.tolist()) 
    return out