如何实现Numpy数组行间元素级比较并统计符合条件行数
Python实现:统计存在全元素小于自身行的行数
问题描述
给定一个50行15列的Numpy数组,需要统计其中满足「存在至少一行(排除自身)的所有元素均小于当前行」的行数。
示例数据:
a b c 1 6 2 2 6 8 4 7 12 7 9 13
示例中第3、4行符合条件,最终返回计数2。
实现代码
import numpy as np # 替换为你的数据集数组 x = np.array([ [1, 6, 2], [2, 6, 8], [4, 7, 12], [7, 9, 13] ]) # 生成两两行的元素级比较结果:other_row < current_row row_comparisons = x[:, np.newaxis, :] > x[np.newaxis, :, :] # 判断每一对行是否满足other_row所有元素都小于current_row all_elements_less = np.all(row_comparisons, axis=2) # 排除自身与自身的比较(对角线元素设为False) np.fill_diagonal(all_elements_less, False) # 统计存在至少一行满足条件的行数 count = np.sum(np.any(all_elements_less, axis=1)) print(count) # 示例输出:2
代码说明
- 行级元素比较:借助Numpy广播机制,
x[:, np.newaxis, :] > x[np.newaxis, :, :]生成三维数组,其中row_comparisons[i,j,k]表示第j行第k个元素是否小于第i行第k个元素。 - 全元素判断:
np.all(row_comparisons, axis=2)对每行的元素比较结果取逻辑与,得到二维数组,all_elements_less[i,j]为True表示第j行所有元素都小于第i行。 - 排除自身比较:用
np.fill_diagonal将对角线位置(自身和自身的比较)设为False,避免误统计。 - 统计结果:
np.any(all_elements_less, axis=1)判断每行是否存在符合条件的其他行,最后用np.sum统计总数。
该方法利用Numpy向量运算,避免循环,效率较高,适配50行15列的数据集规模。
内容的提问来源于stack exchange,提问作者Dinc Kirikci
相关产品推荐
相关产品推荐

