Numpy在2D矩阵上的where()

时间:2014-06-14 12:17:14

标签: python arrays numpy matrix

我有一个像这样的矩阵

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

我想得到行包含字符串'bar'的索引

在1d阵列中

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

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

results = t[rows]

应该给我正确的行

但我无法弄清楚如何使用2d数组。

2 个答案:

答案 0 :(得分:12)

对于一般情况,您的搜索字符串可以位于任何列中,您可以执行以下操作:

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

答案 1 :(得分:11)

您必须将数组切片到要编制索引的列:

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

返回:

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