对于具有相同尺寸的两个矩阵,pandas矩阵点积失败

时间:2018-02-13 16:27:07

标签: pandas dot-product

我刚收到这个错误,我想不出是什么原因。你能帮忙看看。

这两个数据帧都是4乘4.我无法弄清楚为什么他们不能得到点积。 np.dot将在这里工作。谢谢。

df1

   i1       i2        i3            i4
0   1  0.00000  0.000000  0.000000e+00
1   0  0.85935  0.080730  2.948807e-07
2   0  0.00000  0.832259  9.775291e-02
3   0  0.00000  0.002086  8.392081e-01

df2
   i1       i2        i3            i4
0   1  0.00000  0.000000  0.000000e+00
1   0  0.83891  0.090042  3.365395e-07
2   0  0.00000  0.809407  1.080944e-01
3   0  0.00000  0.001577  8.176372e-01

df1.dot(df2)

---------------------------------------------------------------------------
ValueError                                
<ipython-input-329-95627ce5e4d3> in <module>()
----> 1 df1.dot(df2)
 packages\pandas\core\frame.pyc in dot(self, other)
    786             if (len(common) > len(self.columns) or
    787                     len(common) > len(other.index)):
--> 788                 raise ValueError('matrices are not aligned')
    789 
    790             left = self.reindex(columns=common, copy=False)

ValueError: matrices are not aligned

2 个答案:

答案 0 :(得分:1)

您需要在此处添加T(Pandas&#39; dot基于索引和列)

df1.dot(df2.T)
Out[634]: 
     0         1         2         3
0  1.0  0.000000  0.000000  0.000000
1  0.0  0.728186  0.065343  0.000128
2  0.0  0.074938  0.684203  0.081239
3  0.0  0.000188  0.092402  0.686171

答案 1 :(得分:1)

你可以转换为numpy

df1.values.dot(df2.values)

array([[1.        , 0.        , 0.        , 0.        ],
       [0.        , 0.72091731, 0.14272102, 0.00872699],
       [0.        , 0.        , 0.67379042, 0.16988895],
       [0.        , 0.        , 0.00301185, 0.68639325]])

或者您可以切换轴标签

df1.dot(df2.set_index(df2.columns))

   i1        i2        i3        i4
0  1.0  0.000000  0.000000  0.000000
1  0.0  0.720917  0.142721  0.008727
2  0.0  0.000000  0.673790  0.169889
3  0.0  0.000000  0.003012  0.686393