Python 二维矩阵上的Numpy where()

Python 二维矩阵上的Numpy where(),python,arrays,numpy,matrix,Python,Arrays,Numpy,Matrix,我有一个这样的矩阵 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] 应该给我正确的排 但是我不知道如何让它与2d数组一起工作。您必须将数组切片到要索引的列: rows = np.where(t[:,

我有一个这样的矩阵

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]
应该给我正确的排


但是我不知道如何让它与2d数组一起工作。

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

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

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

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

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

会发生什么?你试过什么?只是想检查一下,你是这样创建数组的吗?请注意,您所做的工作提供了一个字符串数组。如果你想混合使用字符串和整数,你会有一个记录数组,它的行为会有所不同