无需循环逐元素对比不同长度numpy数组的统计方法咨询
实现方案
完全可以实现,核心利用NumPy的广播或排序查找能力即可全程无循环完成需求,以下是两种常用实现方式:
方法1:广播直接对比(写法简单,适合小规模数组)
import numpy as np # 生成示例数组 a = np.random.randn(100, 1) b = np.random.randn(59, 1) # 核心计算逻辑 result = (a.T > b).sum(axis=1)
逻辑说明:
a.T将形状为(100, 1)的a转置为(1, 100)- 利用NumPy广播机制,
a.T > b会自动扩展为(59, 100)的布尔矩阵,每个位置的值对应a中对应元素 > b中对应元素的判断结果 - 按行求和
sum(axis=1)后得到长度为59的结果数组,第i个值就是a中大于b[i]的元素总个数
方法2:排序+二分查找(性能更高,适合大规模数组)
如果a的长度远大于b,该方案时间复杂度更低,性能优势更明显:
import numpy as np a = np.random.randn(100, 1) b = np.random.randn(59, 1) # 先把a拉平为1维数组并排序 a_sorted = np.sort(a.ravel()) # 二分查找每个b元素的插入位置,总长度减插入位置即为大于该元素的个数 result = len(a_sorted) - np.searchsorted(a_sorted, b.ravel())
内容的提问来源于stack exchange,提问作者Donna Schweitzer
相关产品推荐
相关产品推荐

