如何用Pandas实现Series列向量x1与x2^T的外积生成DataFrame?
如何用Pandas实现列向量x1与行向量x2^T的外积(生成DataFrame)
嘿,这个需求我之前处理过好多次,用Pandas实现起来特别顺畅,有两种高效的方式,我给你唠唠最优的实现步骤:
首先先明确我们的基础数据,假设我们有两个对应线性代数列向量的Pandas Series:
import pandas as pd x1 = pd.Series([1, 2, 3], name='x1') x2 = pd.Series([4, 5, 6], name='x2')
方法一:Pandas原生矩阵乘法(最直观易读)
直接利用Pandas的广播机制和矩阵乘法运算符@,把两个Series转成合适的二维结构后相乘:
# 把x1转成列格式DataFrame,x2转成行格式DataFrame,再执行矩阵乘法 outer_matrix = x1.to_frame() @ x2.to_frame().T
这个操作完全贴合线性代数里x1 * x2^T的逻辑:x1.to_frame()是3行1列的列向量,x2.to_frame().T是1行3列的行向量,相乘后直接得到3x3的DataFrame,还自动保留了原Series的索引和列名,代码可读性拉满,日常场景下首推这个方法。
方法二:借助Numpy外积函数(性能极致优化)
如果你的数据量特别大,追求极致运算性能,可以用Numpy的np.outer()计算外积,再包装成DataFrame:
import numpy as np outer_matrix = pd.DataFrame(np.outer(x1, x2), index=x1.index, columns=x2.index)
Numpy的底层是C级别的运算,处理超大规模数据时会比纯Pandas操作快一丢丢,结果和上面的方法完全一致,只是需要手动指定索引和列名。
小提示
两种方法生成的DataFrame,行索引对应原x1的索引,列名对应原x2的索引,完美匹配线性代数中外积的结果格式,你可以根据自己的代码风格和数据规模选择合适的方式~
内容的提问来源于stack exchange,提问作者user40780
相关产品推荐
相关产品推荐

