如何将子数组元素替换为其平均值?求无需for循环的高效方法
无需for循环高效替换数组子元素为子数组均值
当然可以,利用NumPy的广播机制就能实现高效处理,全程不用写for循环:
实现步骤与代码
首先定义你的数组:
import numpy as np a = np.array([[1, 2, 3], [2, 3, 4], [3, 4, 5]])
计算每个子数组(行)的平均值:
使用mean(axis=1)按行计算均值,得到一维数组:row_means = a.mean(axis=1) # 输出:array([2., 3., 4.])扩展均值数组的维度,使其能与原数组广播匹配:
通过[:, np.newaxis]或reshape(-1, 1)将一维数组转为列向量:row_means = row_means[:, np.newaxis] # 输出:array([[2.], [3.], [4.]])直接赋值替换原数组元素:
NumPy的广播机制会自动将列向量扩展为与原数组相同的形状,完成替换:a[:] = row_means
最终得到的数组就是你想要的结果:
print(a) # 输出:array([[2., 2., 2.], [3., 3., 3.], [4., 4., 4.]])
为什么高效?
NumPy的底层是用C实现的,这类向量化操作比Python层面的for循环快得多,尤其是处理大规模数组时优势更明显。
内容的提问来源于stack exchange,提问作者Jun
相关产品推荐
相关产品推荐

