【发布时间】:2013-04-08 22:16:21
【问题描述】:
我想在 DataFrames 与 DataFrames、Dataframes 与 Series 以及 Series 与 Series 之间使用 Python Pandas 强制矩阵乘法“方向”。
例如,我尝试了以下代码:
t = pandas.Series([1, 2])
print(t.T.dot(t))
哪个输出:5
但我希望这样:
[1 2
2 4]
Pandas 很棒,但无法以我想要的方式进行矩阵乘法是最令人沮丧的,因此我们将不胜感激。
PS:我知道 Pandas 试图隐式使用索引来找到计算矩阵乘积的正确方法,但似乎无法关闭这种行为!
【问题讨论】:
-
一个系列是一维对象;它的转置是(空洞地定义为)它自己。即使在纯 numpy 中,
a = np.array([1,2]); a.dot(a.T)也会给出5。为什么不简单地编写一个函数 --silly_dot-- 使用与numpy中相同的a[:,None]技巧来提供您想要的行为? -
我不知道 numpy 技巧,但即使它适用于 Series,它也不适用于 DataFrames。我希望 Pandas 在需要时像在 Octave 中一样进行矩阵乘法:一个简单的 t'*t 可以解决 Octave 中的问题。为什么不在 Pandas 中?
-
您应该查看此页面:scipy.org/…,
*表示元素乘法而不是点积的原因有很多,但正如 DSM 指出的那样,您可以创建一个函数来模拟你正在寻找的东西 -
我从来没有说过 * 进行元素乘法是愚蠢的(你可以重读我的评论),但很愚蠢的是,熊猫没有办法在没有索引对齐的情况下进行点乘。如果没有矩阵乘法,向量化是不可能的(创建我自己的仿真函数只会让事情变得更糟)。
-
让 pandas 支持这一点也很好,这样您就不必向下转换为 numpy 而不是向上转换回 pandas 结构。
标签: python pandas matrix-multiplication dot-product dataframe