我有一个形状为
的numpy数组(500,12)
我想做的就是检查偶数列是否具有正值,例如。 value > 0
。在这种情况下,我想删除数组中的整行。
我把它放了:
a = a[a[:,1] < 0, :]
这会消除所需的行,但会查看第二列。我希望它也检查第4列,第6列,第8列等。
有没有办法使用上面的方法呢?
答案 0 :(得分:2)
如果您正在处理NumPy数组,那么您可以使用fancy indexing方法(使用整数数组序列索引数组),如下所示:
mask = (a[:, np.arange(1, a.shape[1], 2)] < 0).all(axis=1)
out = a[mask]
<强> 说明: 强>
选择要比较其值的奇数列的位置:
np.arange(1, a.shape[1], 2) # a.shape[1] gives the number of columns
# array([ 1, 3, 5, 7, 9, 11])
接下来,我们根据这些索引对数组进行子集化,并通过提供执行逐列检查的axis=1
来查看这些列下的值是否小于零,并在删除后返回包含减少的行数的数组剩下的。
答案 1 :(得分:1)
虽然可能不是最有效的方法,但您可以对所有行使用 elementwise和 &
:
a = a[(a[:,1]<0)&(a[:,3]<0)&(a[:,5]<0)&(a[:,7]<0)&(a[:,9]<0)&(a[:,11]<0),:]
因此,您屏蔽了存在偶数列为正的所有项目。
可以使效果更优雅(性能损失轻微)from functools import reduce
a = a[reduce(lambda x,y:x&y,(a[:,i]<0 for i in range(1,12,2))),:]
如果事先未完全了解shape
,您可以使用.shape[1]
:
from functools import reduce
a = a[reduce(lambda x,y:x&y,(a[:,i]<0 for i in range(1,a.shape[1],2))),:]
答案 2 :(得分:1)
一般方法是使用条件构建列表推导:
a = [row for row in a if all(row[j] <= 0 for j in range(0, len(row), 2))]
答案 3 :(得分:1)
如果你不想要一个循环(因为它会迭代地缩小你的数据帧并带来一些相关的开销):
Colocar
所以在一行中:
CookieManager cookieManager = new CookieManager() {
protected int getPort(URL url) {
// or deduct it from url.getProtocol()
return 80;
}
};
webClient.setCookieManager(cookieManager);
答案 4 :(得分:0)
不使用循环,没有一个命令可以帮助您完成动机。我建议循环遍历所有行然后执行此操作。