Pandas dot点积形状匹配仍报matrices are not aligned错误
报错原因
pandas执行dot矩阵运算时,不会仅检查矩阵维度,还会严格对齐操作数的标签:要求左侧DataFrame的列标签,和右侧DataFrame的行标签取值、顺序完全匹配,才会执行运算,和numpy纯按维度、位置计算的逻辑有本质区别。
你构造的3阶方阵df2,列标签是['C1', 'C2', 'C3'],行标签是pandas默认生成的整数序列[0, 1, 2],执行df2.dot(df2)时,左侧列标签和右侧行标签完全不匹配,哪怕维度符合方阵乘法要求,也会抛出ValueError: matrices are not aligned错误。
正确实现方法(完全匹配Excel MMULT计算效果)
Excel的MMULT函数是纯按单元格位置做矩阵乘法,完全不依赖行、列标签,最稳妥的实现方式是调用DataFrame底层的numpy数组做运算,绕开pandas的标签对齐逻辑,代码如下:
import pandas as pd # 原DataFrame构造代码 df2 = pd.DataFrame({'C1':[0, 0, 0.7], 'C2':[0.5, 0, 0], 'C3':[0.7, 0.3, 0] } ) # 执行标准矩阵乘法,保留原DataFrame的行、列标签 df_result = pd.DataFrame( data=df2.values @ df2.values, # 等价写法:df2.values.dot(df2.values) index=df2.index, columns=df2.columns ) print(df_result)
运行输出和预期结果完全一致:
C1 C2 C3 0 0.49 0.0 0.15 1 0.21 0.0 0.00 2 0.00 0.35 0.49
- 注意:
df2.multiply(df2)实现的是逐元素相乘的哈达玛积,不是标准矩阵乘法,不符合需求,不要使用。
内容的提问来源于stack exchange,提问作者ugur
相关产品推荐
相关产品推荐

