如何在符合特定条件的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。
答案 0 :(得分:2)
首先:Don't use np.matrix
, use normal np.array
s。
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]])
>>> 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,:]]
那会起作用