【问题标题】:Finding index of array in 2 multidimensional array in Python在Python中查找2多维数组中的数组索引
【发布时间】:2014-01-10 17:32:24
【问题描述】:

我有一个数组

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 超出范围。

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

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

【问题讨论】:

  • 您的实际数据是什么样的?你说的是元组、Python 列表还是 NumPy 数组?
  • 你想在这里输出什么?通过仅返回索引,您如何知道在哪个数组中找到了它?
  • 我说的 np.arrays 可能是巨大的

标签: python arrays numpy indexing


【解决方案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)

【讨论】:

  • Ashwini 如果我也想知道矩阵是 r 还是 l?
  • @user3154159 他们的名字还是他们的价值?
  • r 或 l 的名称以及 v 在 r 或 l 中的索引
  • @user3154159 AFAIK numpy 数组没有任何 __name__ 属性,因此您必须传入一个字典。查看更新的解决方案。
  • 效果很好。你太棒了。谢谢
【解决方案2】:
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;

【讨论】:

  • 它可以工作,但是用索引遍历列表并不是 Pythonic。请不要在 Python 中编写 C - 它很难看!
  • 不知道v数组是在l还是r
  • 我需要 v 在 r 或 l 中的索引
  • @user3154159 然后将 for 循环分成 2 个不同的函数并适当地调用它们
猜你喜欢
  • 2013-04-12
  • 2019-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多