如何隔离符合特定条件的2d numpy矩阵中的行?

时间:2017-06-21 10:39:40

标签: python arrays python-2.7 numpy matrix

如何在符合特定条件的2d numpy矩阵中隔离行?例如,如果我有一些数据,而我只想查看0索引值为5或更小的行,我将如何检索这些值?

我试过这种方法:

import numpy as np

data = np.matrix([
    [10, 8, 2],
    [1, 4, 5],
    [6, 5, 7],
    [2, 2, 10]])

#My attempt to retrieve all rows where index 0 is less than 5
small_data = (data[:, 0] < 5)

输出结果为:

matrix([
    [False],
    [ True],
    [False],
    [ True]], dtype=bool)

但是我希望输出为:

   [[1, 4, 5],
    [2, 2, 10]]

另一种方法可能是循环遍历矩阵行,如果0索引小于5,则将行附加到列表中,但我希望有更好的方法。

注意:我使用的是Python 2.7。

3 个答案:

答案 0 :(得分:2)

首先:Don't use np.matrix, use normal np.arrays

import numpy as np

data = np.array([[10, 8, 2],
                 [1, 4, 5],
                 [6, 5, 7],
                 [2, 2, 10]])

然后你可以随时使用boolean indexing(基于你进行比较时得到的布尔数组)来获得所需的行:

>>> data[data[:, 0] < 5]
array([[ 1,  4,  5],
       [ 2,  2, 10]])

integer array indexing

>>> data[np.where(data[:, 0] < 5)]
array([[ 1,  4,  5],
       [ 2,  2, 10]])

答案 1 :(得分:1)

通过这种方式,您可以使用逻辑数组来选择所需的行。

>>> data = np.matrix([
[10, 8, 2],
[1, 4, 5],
[6, 5, 7],
[2, 2, 10]])
>>> data = np.array(data)
>>> data[(data[:, 0] < 5), :]
array([[ 1,  4,  5],
   [ 2,  2, 10]])

您还可以使用np.squeeze过滤行。

>>> ind = np.squeeze(np.asarray(data [:,0]))<5
>>> data[ind,:]
array([[ 1,  4,  5],
   [ 2,  2, 10]])

答案 2 :(得分:-2)

使用以下代码。

data[data[small_data,:]]

那会起作用