NumPy广播错误:(540,2500)与(540,)数组无法执行逐行均值除法
解决Numpy行均值除法的广播问题
问题出在Numpy的广播规则上:两个数组做运算时,维度需要从后往前对应匹配。你的train_data是(540,2500)的二维数组,而train_rows_mean是(540,)的一维数组,最后一个维度(2500 vs 无维度)不匹配,导致无法广播。
解决方法很简单,只需要把行均值数组转换成**(540,1)**的二维形状,这样就能和原数组的维度匹配,自动广播到每行的所有元素上。以下三种方法都可以实现:
方法1:计算均值时保留维度
直接在mean()方法中指定keepdims=True,让结果保持二维形状:
train_rows_mean = train_data.mean(axis=1, keepdims=True) # 形状变为(540,1) train_data = train_data / train_rows_mean
方法2:用reshape调整维度
通过reshape(-1,1)把一维数组转成二维:
train_rows_mean = train_data.mean(axis=1).reshape(-1, 1) # 形状变为(540,1) train_data = train_data / train_rows_mean
方法3:用np.newaxis增加维度
借助np.newaxis在一维数组后添加一个维度:
import numpy as np train_rows_mean = train_data.mean(axis=1)[:, np.newaxis] # 形状变为(540,1) train_data = train_data / train_rows_mean
验证一下调整后的形状:
print(train_rows_mean.shape) # 输出(540,1)
此时再做除法运算就不会报错了。
内容的提问来源于stack exchange,提问作者sahuno
相关产品推荐
相关产品推荐

