二维矩阵上的 Numpy where()

Posted

技术标签:

【中文标题】二维矩阵上的 Numpy where()【英文标题】:Numpy where() on a 2D matrix 【发布时间】:2014-08-04 20:53:17 【问题描述】:

我有一个这样的矩阵

t = np.array([[1,2,3,'foo'],
 [2,3,4,'bar'],
 [5,6,7,'hello'],
 [8,9,1,'bar']])

我想获取行包含字符串'bar'的索引

在一维数组中

rows = np.where(t == 'bar')

应该给我索引 [0,3],然后是广播:-

results = t[rows]

应该给我正确的行

但我不知道如何让它与二维数组一起使用。

【问题讨论】:

会发生什么?你试过什么? 只是检查一下,这实际上是您创建阵列的方式吗?请注意,您所做的提供了一个 strings 数组。如果你想要字符串和整数的混合,你将有一个记录数组,它的行为会有所不同。 我按照上面的方法做了,我猜这是最小的数据类型 numpy 设法适合这个数组类型。Jaime 的回答虽然我从来没有想过行,cols之前的分离 【参考方案1】:

您必须将数组切片到要索引的 col:

rows = np.where(t[:,3] == 'bar')
result = t1[rows]

这会返回:

 [[2,3,4,'bar'],
  [8,9,1,'bar']]

【讨论】:

【参考方案2】:

对于一般情况,您的搜索字符串可以在任何列中,您可以这样做:

>>> rows, cols = np.where(t == 'bar')
>>> t[rows]
array([['2', '3', '4', 'bar'],
       ['8', '9', '1', 'bar']],
      dtype='|S11')

【讨论】:

以上是关于二维矩阵上的 Numpy where()的主要内容,如果未能解决你的问题,请参考以下文章

numpy.where

如何在numpy的二维矩阵中随机采样

在二维矩阵中使用 numpy.nanargmin()

将 NumPy 向量转换为二维数组/矩阵

获取二维 numpy ndarray 或 numpy 矩阵中前 N 个值的索引

使用 numpy 将 csv 加载到二维矩阵中以进行绘图