我有一个数组
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的范围。
只有在我必须搜索索引的矩阵之前知道才有效,但我没有。感谢
如果我想知道索引和包含它的数组?
答案 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)