在列表中查找numpy数组的索引

Lee*_*e88 18 python arrays numpy list

import numpy as np
foo = [1, "hello", np.array([[1,2,3]]) ]
Run Code Online (Sandbox Code Playgroud)

我期待

foo.index( np.array([[1,2,3]]) ) 
Run Code Online (Sandbox Code Playgroud)

回来

2
Run Code Online (Sandbox Code Playgroud)

但我得到了

ValueError:具有多个元素的数组的真值是不明确的.使用a.any()或a.all()

什么比我目前的解决方案更好?这似乎效率低下.

def find_index_of_array(list, array):
    for i in range(len(list)):
        if np.all(list[i]==array):
            return i

find_index_of_array(foo, np.array([[1,2,3]]) )
# 2
Run Code Online (Sandbox Code Playgroud)

mgi*_*son 12

这里出错的原因显然是因为numpy的ndarray覆盖==了返回数组而不是布尔值.

AFAIK,这里没有简单的解决方案.只要
np.all(val == array)位工作,以下将工作.

next((i for i, val in enumerate(lst) if np.all(val == array)), -1)
Run Code Online (Sandbox Code Playgroud)

该位是否有效取决于数组中的其他元素是什么,以及它们是否可以与numpy数组进行比较.