如何使用Numpy删除零的数量多于正数的行?
Numpy数组过滤问题的解决方法
你已经完成了将数组中负数转为0的操作,现在只需要补充筛选逻辑,就能保留零的数量少于正数数量的行。直接用Numpy的矢量运算就能高效实现,不用循环。
修改后的完整代码:
import numpy as np def clean_out(data): data = np.array(data) # 第一步:将所有负数转为0 data[data < 0] = 0 # 计算每行的零元素个数(axis=1表示按行统计) zero_counts = np.sum(data == 0, axis=1) # 每行的正数个数 = 该行总元素数 - 零元素个数 positive_counts = data.shape[1] - zero_counts # 筛选出零数量少于正数数量的行 filtered_data = data[zero_counts < positive_counts] # 保留你原有的排序操作(注意:axis=0是按列排序,若需行内排序改为axis=1) sorted_data = np.sort(filtered_data, axis=0, kind='heapsort') return sorted_data
关键逻辑说明
np.sum(data == 0, axis=1):利用布尔数组的特性,统计每行中等于0的元素数量,axis=1确保按行计算总和。- 正数数量通过每行总元素数减去零的数量得到,避免重复遍历数组。
- 布尔索引
zero_counts < positive_counts直接生成筛选掩码,快速过滤不符合条件的行,效率远高于循环。
测试结果
针对你的测试输入:
-1 2 -3 -4 9 8 2 -2 6 7 -3 -5 1 7 4 3
处理后会过滤掉零数≥正数的行,最终输出:
[[1 7 2 0] [9 8 4 3]]
内容的提问来源于stack exchange,提问作者Nickochka
相关产品推荐
相关产品推荐

