查找列表中的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
?
答
应用在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
什么是这个代码怎么回事? – WuJo
通常,当您尝试在'numpy'布尔数组(或列表)上执行Python布尔操作('in','if')时会出现此错误。例如'如果[真,假......]:'。在这里,我怀疑一个'index'匹配id,另一个尝试'=='测试。似乎取决于列表的构建方式。 – hpaulj
涉及'numpy'数组的列表索引操作可能不是一个好主意。 – hpaulj