【发布时间】:2016-02-26 15:19:15
【问题描述】:
考虑以下两个数组的列表:
from numpy import array
a = array([0, 1])
b = array([1, 0])
l = [a,b]
然后找到a的索引正确给出
l.index(a)
>>> 0
虽然这不适用于b:
l.index(b)
ValueError: The truth value of an array with more than one element is ambiguous.
Use a.any() or a.all()
在我看来,调用列表的 .index 函数不适用于 numpy 数组列表。
有人知道解释吗? 到目前为止,我总是通过将数组转换为字符串来解决这个问题。有人知道更优雅、更快速的解决方案吗?
【问题讨论】:
-
对于相同形状数组的列表,您可以使用 NumPythonic 搜索:
np.nonzero((l == b).all(1))[0][0]。 -
发生这种情况是因为
.index()首先比较身份然后比较相等,它适用于a,因为a is l[0]是True,但是当涉及到查找b时,它以@ 结尾987654335@,现在 Python 在其上调用bool():bool(b == l[0])。所以,l.index(array([0, 1]))也会引发同样的错误。我已经在这里解释过了:stackoverflow.com/a/28815970/846892 -
嗨,这个问题重复已经回答了,stackoverflow.com/a/1156114/4061269
-
@LiorDadon 我认为您建议的答案及其潜在问题都不能完全解决当前的问题。那里的 OP 没有提到数组,与这里相反,她甚至声明对于列表列表,
['a','b'] in list确实 工作。 -
@NotAnAmbiTurner 我打电话给
.indexonl,这仍然是一个列表。这里的重点不是l,而是它的元素是数组。
标签: python arrays list search numpy