获取scipy / numpy中复杂条件所有的所有行

时间:2012-06-21 02:36:20

标签: python numpy scipy

获取表示2d矩阵的ndarray的复杂条件所有行的最简单方法是什么?例如得到所有值都高于5的所有行或者所有值都低于5?

感谢。

2 个答案:

答案 0 :(得分:3)

您可能知道布尔数组可用于索引,例如:

import numpy as np
x = np.arange(10)
x2 = x[x<5]

对于布尔数组,np.all允许您在给定轴上应用它:

y = np.arange(12).reshape(3,4)

b = y < 6
b1 = np.all(b, axis=0)
b2 = np.all(b, axis=1)

y1 = y[b1]
y2 = y[b2]

它只返回符合条件的数组,因此不保留形状。 (如果确实需要保留形状,请查看屏蔽数组。)

答案 1 :(得分:2)

这将为您提供所有值低于或高于5的行的行索引:

x = numpy.arange(100).reshape(20,5)
numpy.where((x > 5).all(axis=1) ^ (x < 5).all(axis=1))

或更简洁(但不是通过相同的逻辑继续):

numpy.where(((x > 5) ^ (x < 5)).all(axis=1))

要获取数据而不是索引,请直接使用布尔结果:

x[((x > 5) ^ (x < 5)).all(axis=1)]