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

Python 如何在2d numpy矩阵中隔离符合特定条件的行?,python,arrays,python-2.7,numpy,matrix,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

如何在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)
但是,我希望输出为:

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


注意:我使用的是Python2.7。

这样您就得到了一个逻辑数组,可以用来选择所需的行

>>> 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]])

使用以下代码

data[数据[小数据,:]

这将首先起作用

然后,您可以始终使用(基于进行比较时获得的布尔数组)来获取所需的行:

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

>>数据[np.where(数据[:,0]<5]
数组([[1,4,5],
[ 2,  2, 10]])

data[(data[:,0]<5:,0]
@Coldspeed这似乎是错的,你是说
data[(data[:,0]<5),:]
?@MSeifert是的,大概是这样的。如果我靠近一台机器,我会在发帖前检查一下。我的numpy技能仍在发展:)或者相当于,
data[data[data[:,0]我刚刚尝试了这个,但出现了一个错误:“索引器:数组索引太多”。我的代码是:output=data[data[small_data,:]]我缺少什么吗?我得到了一个错误“数组索引太多”对于你答案的上半部分。np.squeeze部分非常有效!@CSLearner我添加了
数据的初始化以确保我们运行的是相同的东西。奇怪的原因是它对我来说工作正常。你能试着重新运行完整的答案的第一部分吗?哦,你是正确的,我测试了它,它工作正常。尽管括号结果证明s是不必要的,所以我也可以这样做:data[data[:,0]<5,:]
>>> ind = np.squeeze(np.asarray(data [:,0]))<5
>>> data[ind,:]
array([[ 1,  4,  5],
   [ 2,  2, 10]])
import numpy as np

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