python - 当多个列值已知时获取 2D numPy 数组的行索引

标签 python numpy

假设我有一个 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/

相关文章:

python - 我陷入了从矩阵检索值的过程

Python正则表达式使用奇怪的unicode字符

python - 如何连接两个 Pandas 系列的对应值?

python - 从 Django 中的项目目录提供静态文件

python - 如何从Python脚本中读取标准输出?

python - 在 Python 中运行 Fortran 命令行程序

python - 如何获取多索引数据框前两个索引的字典

python - 在 Django/REST 中保存多对多模型?

python - 如何使用scikit线性回归模型同时求解多个独立的时间序列

python - 改进算法以找到一维 numpy 数组的局部最大值