假设我有一个 2D numPy 数组,例如:
a = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]
如何找到我知道多个值的行的索引?例如,如果已知第 0 列为 2,第 1 列为 5,我想知道满足此条件的行索引(在本例中为第 1 行)。
在我的应用程序中,前两列是 (x,y) 坐标,第三列是有关该坐标的信息。我试图在列表中查找特定坐标,以便我可以更改第三列中的值。
编辑:为了澄清,这是一个非正方形的例子:
a = [ [1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18] ]
假设我知道我要查找的行在第 0 列中有 13 个,在第 1 列中有 14 个。我想返回该行的索引。在这种情况下,我想返回索引 2(第 2 行)。
或者更好的是,我想编辑第 0 列有 13 个,第 1 列有 14 个的行的第 4 列。这是我针对我所描述的案例找到的解决方案(将值更改为 999):
a[(a[:,0]==13) & (a[:,1]==14), 3] = 999
给出:
a = [ [1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12], [13, 14, 15, 999, 17, 18] ]
如果不清楚,我很抱歉。有人可以在我的原始帖子(编辑上方)中指出如何以不同的方式解释它,因为我看不到它。
谢谢。
编辑 2:修复了第一次编辑中的错误(以粗体显示)
我现在明白了我是如何让所有人都感到困惑的。我的问题的解决方案在 eat 解决方案的条件 b) 中得到了很好的描述。谢谢。
最佳答案
In [80]: a = np.array([ [1, 2, 3], [4, 5, 6], [7, 8, 9] ])
In [81]: a
Out[81]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
a==2
返回一个 bool 型 numpy 数组,显示条件为 True 的位置:
In [82]: a==2
Out[82]:
array([[False, True, False],
[False, False, False],
[False, False, False]], dtype=bool)
您可以使用 np.any(...,axis=0)
找到任何为 True 的列:
In [83]: np.any(a==2,axis=0)
Out[83]: array([False, True, False], dtype=bool)
In [84]: np.any(a==5,axis=0)
Out[84]: array([False, True, False], dtype=bool)
您可以使用 &
找到两个条件同时为真的地方:
In [85]: np.any(a==2,axis=0) & np.any(a==5,axis=0)
Out[85]: array([False, True, False], dtype=bool)
最后,您可以使用 np.where
找到条件同时为 True 的列的索引:
In [86]: np.where(np.any(a==2,axis=0) & np.any(a==5,axis=0))
Out[86]: (array([1]),)
关于python - 当多个列值已知时获取 2D numPy 数组的行索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4910789/