在Python中查找2个多维数组中的数组索引

时间:2014-01-10 17:32:24

标签: python arrays numpy indexing

我有一个数组

v = (x,y,z)

和两个多维数组

l = (a,b,c),(d,e,f)

r = (g,h,i),(l,m,n),(x,y,z).

我想知道v的索引,无论是在第一个还是第二个多维数组中。我试过numpy.where(v==l)[0][0],但它返回:

  

索引0超出轴0的大小为0的范围。

只有在我必须搜索索引的矩阵之前知道才有效,但我没有。感谢

如果我想知道索引和包含它的数组?

2 个答案:

答案 0 :(得分:1)

def containsArray(v):
    for index, arr in enumerate(l):
        if v == arr:
            ret index;

    for index, arr in enumerate(r):
        if v == arr:
            ret index;

答案 1 :(得分:1)

定义一个函数,该函数接受要搜索的项目和要搜索的数组列表,并使用循环在每个数组中查找该项目。使用异常处理来捕获IndexError

>>> import numpy as np
>>> v = np.array([[1, 2, 3]])
>>> r = np.array([[1, 2, 3], [0, 9, 8], [2, 4, 4]])
>>> l = np.array([[4, 5, 6], [7, 8, 9]])
def get_index(seq, *arrays):
    for array in arrays:
        try:
            return np.where(array==seq)[0][0]
        except IndexError:
            pass
...         
>>> get_index(v, r, l)
0
>>> get_index(np.array([7, 8, 9]), r, l)
1

如果在任何数组中找不到该项,您将获得None作为输出。

<强>更新

如果你想要这个名字,那么在字典中传递数组:

 def get_index(seq, **arrays):
    for name, array in arrays.items():
        try:
            return name, np.where(array==seq)[0][0]
        except IndexError:
            pass
...         
>>> get_index(v, **dict(r=r, l=l))
('r', 0)
>>> get_index(np.array([7, 8, 9]), **dict(r=r, l=l))
('l', 1)