如何基于频数数据计算中位数(不使用np.median,支持Python与NumPy)
基于频数数组计算中位数的实现方案
先澄清你对np.repeat的误解
你提到的np.repeat(array, repeats)完全支持按对应频数重复每个元素,并非只能固定次数。当repeats是一个和输入数组长度相同的数组时,函数会把array的第i个元素重复repeats[i]次,正好满足你的需求。
一、NumPy实现方案
直接用np.repeat就能快速重建原始数据集,之后调用你的中位数计算函数即可:
import numpy as np # 示例输入 severities = np.arange(7) with_helmet = np.array([248, 58, 11, 3, 2, 8, 1]) # 按对应频数重建原始数组 reconstructed_data = np.repeat(severities, with_helmet) # 调用你已有的中位数函数,或者直接用numpy内置的中位数计算 # median = your_median_function(reconstructed_data) median = np.median(reconstructed_data) print(median) # 输出结果为0.0
二、基础Python实现方案
如果不用NumPy,用原生Python也能轻松实现:
# 示例输入 severities = list(range(7)) with_helmet = [248, 58, 11, 3, 2, 8, 1] # 方式1:循环extend reconstructed_data = [] for value, count in zip(severities, with_helmet): reconstructed_data.extend([value] * count) # 方式2:更简洁的列表推导式 # reconstructed_data = [val for val, cnt in zip(severities, with_helmet) for _ in range(cnt)] # 调用你已有的中位数计算函数 # median = your_median_function(reconstructed_data)
内容的提问来源于stack exchange,提问作者Dan Öz
相关产品推荐
相关产品推荐

