Numpy - 删除负值的数据行

时间:2016-03-23 15:05:58

标签: python numpy

我正在从AUTO数字延续包中获取输出,并且需要过滤掉具有负值变量的结果,因为它们是非物理的。所以,如果我有,例如:

>>>   a = np.array([[0,1,2,3,4],[-1,-0.5,0,0.5,1],[-3,-4,-5,0.1,0.2]])

我想留下:

>>> b
array([[ 3. ,  4. ],
       [ 0.5,  1. ],
       [ 0.1,  0.2]])

但是当我尝试numpy.where时,我得到了:

>>> b = a[:,(np.where(a[1]>=0) and np.where(a[2]>=0))]
>>> b
array([[[ 3. ,  4. ]],

       [[ 0.5,  1. ]],

       [[ 0.1,  0.2]]])
>>> b.shape
(3, 1, 2)

也就是说,它会向阵列添加另一个不需要的轴。我做错了什么?

2 个答案:

答案 0 :(得分:6)

假设你要做的就是删除有一个或多个负值的列,你可以这样做:

a = np.array([[0,1,2,3,4],[-1,-0.5,0,0.5,1],[-3,-4,-5,0.1,0.2]])
b = a[:,a.min(axis=0)>=0]

答案 1 :(得分:1)

如果您想要的是完全正面的列,那么@ Yakym的答案是可行的,因为它可能更快。但是,如果它只是一个示例,并且您想要对某些列进行阈值处理,则可以通过严格修改示例来实现:

>>> a[:, (a[1] >= 0) & (a[2] >= 0)]
array([[ 3. ,  4. ],
       [ 0.5,  1. ],
       [ 0.1,  0.2]])

此处(a[1] >= 0)(a[2] >= 2)创建由&(布尔/逻辑和)运算符合并并用于索引数组a的布尔掩码。