我正在从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)
也就是说,它会向阵列添加另一个不需要的轴。我做错了什么?
答案 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
的布尔掩码。