【发布时间】:2021-05-29 08:13:42
【问题描述】:
我有一个数组,每行包含 8 个值:
data = np.array([[ 1, 2, 3, 5, 6, 7, 15, 27],
[ 5, 6, 7, 5, 10, 12, 23, 52],
[ 9, 10, 0, 0, 0, 0, 27,44]])
我想删除 data[:,2:5] 等于 0 的每一行(所以 2 到 5 之间的所有列都等于 0)
我发现使用以下可行,但它有点拗口,我无法真正扩展到更多列:
data_nonzero = np.delete(data, np.where(np.bitwise_and(np.bitwise_and((data[:,2]==0), (data[:,3]==0)), np.bitwise_and((data[:,4]==0), (data[:,5]==0)) ) )[0], 0)
我尝试过类似的方法:
new_a = np.delete(data, np.s_[:,2:5] == 0, axis=0)
但这似乎不起作用:
要删除的布尔数组参数 obj 必须是一维的
最好,它会检查每行中 4 列的 2 个条件。比如:
new_a = np.delete(data, np.where(np.s_[:,2:5] == 0 | np.s_[:,2:5] > 50000), axis=0)
【问题讨论】:
-
@mkrieger1 不幸的是没有。我已经看过那个帖子了。我最终会回到我不在的地方:有一个巨大的声明(尽管它可以分成一些次要的声明)。真的希望有另一种方式。我不一定需要多个条件,而是针对多个(但不是全部)列的一个条件
标签: python numpy numpy-ndarray