如何修复形状(3,)与(720,1440)不匹配的对齐错误
问题分析
错误提示shapes (3,) and (720,1440) not aligned: 3 (dim 0) != 720 (dim 0)的核心是矩阵维度不匹配:
- 你构造的
P是展平后的二维数组,形状为(720*1440, 3),转置后P.T的形状是(3, 720*1440) - 但
fermi_gamma_rays仍为二维的(720,1440)数组,未展平,导致点乘时维度无法对应
修复方案
把所有参与计算的二维数组展平为一维,确保矩阵运算维度一致。修改后的代码如下:
# Fermi_map = a0 + a1×dust_map + a2×synchrotron_map # residuals = Fermi_map - (a0 + a1×dust_map + a2×synchrotron_map) # 求解正规方程 # 将所有二维数组展平为一维 dust_flat = dust_map.flatten() synch_flat = synch_map.flatten() fermi_flat = fermi_gamma_rays.flatten() # 构造设计矩阵P,形状为(N, 3),N=720*1440 P = np.column_stack([np.ones(dust_flat.size), dust_flat, synch_flat]) # 计算正规方程的各个部分 PTy = np.dot(P.T, fermi_flat) PTP = np.dot(P.T, P) PTPi = np.linalg.inv(PTP) avec = np.dot(PTPi, PTy) print("avec = {0}".format(avec))
额外说明
- 使用
flatten()将二维图像数组转为一维,保证所有变量的样本数一致(每个像素对应一个样本点) - 用
np.column_stack构造设计矩阵比手动转置更直观,避免维度混淆 - 若后续需要将拟合结果还原为二维图像,直接用
avec[0] + avec[1]*dust_map + avec[2]*synch_map计算即可,无需额外展平
内容的提问来源于stack exchange,提问作者Gabrielle
相关产品推荐
相关产品推荐

