如何计算多组同长度数组对应元素的最大值、最小值与平均值?
计算多数组对应位置的最值与平均值的实现方法
我有以下三组数组:
x = [0.01067573, 0.0139049, 0.01713406, 0.01902214, 0.02228745, 0.0243896, 0.02575684, 0.0281498, 0.0303585, 0.03053122, 0.0282564, 0.03066194, 0.0318088, 0.03290647, 0.03438853, 0.03613471, 0.0383046, 0.0365982, 0.0348341, 0.0289057, 0.0122935, 0.01067573, 0.01067573, 0.01067573, 0.01067573, 0.01067573, 0.01067573, 0.01067573, 0.01067573, 0.01067212, 0.01046571] y = [0.01067573, 0.0139049, 0.01713406, 0.01994051, 0.02141184, 0.0238336, 0.02698133, 0.0296072, 0.0320376, 0.0291436, 0.0262487, 0.0279379, 0.0294417, 0.0308968, 0.0323344, 0.0337727, 0.0336187, 0.0357771, 0.0340007, 0.0282703, 0.0123555, 0.01095551, 0.01067573, 0.01083439, 0.01067573, 0.01067573, 0.01075694, 0.01095551, 0.01067573, 0.01076594, 0.01098551] z = [0.01067573, 0.0139049, 0.01713406, 0.0188497, 0.0213636, 0.0248497, 0.0252536, 0.0274743, 0.0295116, 0.0274806, 0.0273424, 0.02900906, 0.03005469, 0.0308758, 0.03167363, 0.03314961, 0.03595196, 0.0375954, 0.03869676, 0.02937896, 0.012627, 0.01067573, 0.01067573, 0.01098724, 0.01154837, 0.01080896, 0.01085163, 0.01139469, 0.01067573, 0.01076688, 0.01068204]
需要计算这三组数组对应位置元素的最大值、最小值和平均值,得到三个与原数组长度一致的结果数组。比如最大值数组示例如下:
max_array = [0.01067573, 0.0139049, 0.01713406, 0.01994765, 0.02185929, 0.02423337, 0.02760071, 0.0296107, 0.0316786, 0.0289268, 0.0285128, 0.03066194, 0.0313552, 0.03287471, 0.03449902, 0.03616078, 0.0368397, 0.0406049, 0.035475, 0.03232031, 0.0124145, 0.01067573, 0.01067573, 0.01100561, 0.01067573, 0.01067573, 0.01085745, 0.01067573, 0.01067573, 0.01071802, 0.01072735]
请问有可行的实现方法吗?
实现方案
方法一:使用NumPy(推荐)
NumPy针对数组操作做了优化,处理这类逐元素计算效率极高,代码也更简洁:
import numpy as np # 将原生列表转换为NumPy数组 x_np = np.array(x) y_np = np.array(y) z_np = np.array(z) # 计算对应位置的最大值 max_result = np.stack([x_np, y_np, z_np], axis=0).max(axis=0) # 等价写法:max_result = np.maximum(np.maximum(x_np, y_np), z_np) # 计算对应位置的最小值 min_result = np.stack([x_np, y_np, z_np], axis=0).min(axis=0) # 计算对应位置的平均值 mean_result = np.stack([x_np, y_np, z_np], axis=0).mean(axis=0) # 若需要转回原生列表格式 max_result_list = max_result.tolist() min_result_list = min_result.tolist() mean_result_list = mean_result.tolist()
方法二:原生Python实现(无依赖)
如果不想引入第三方库,直接用原生Python的zip函数打包对应位置元素,再逐个计算:
# 最大值数组 max_result = [max(a, b, c) for a, b, c in zip(x, y, z)] # 最小值数组 min_result = [min(a, b, c) for a, b, c in zip(x, y, z)] # 平均值数组 mean_result = [(a + b + c) / 3 for a, b, c in zip(x, y, z)]
这种方法适合小规模数组,当数组长度较大时,NumPy的性能优势会非常明显。
内容的提问来源于stack exchange,提问作者Khalil Mebarkia
相关产品推荐
相关产品推荐

