Python 带多索引的成对矩阵乘法
我有两个多索引数据帧,每个都代表一组k dxd矩阵。我想计算每个k对的成对矩阵积 有人知道这在一次操作中是否可行吗 以下是示例数据帧(请注意,值将不同,即每个矩阵中的值不同)Python 带多索引的成对矩阵乘法,python,pandas,matrix,Python,Pandas,Matrix,我有两个多索引数据帧,每个都代表一组k dxd矩阵。我想计算每个k对的成对矩阵积 有人知道这在一次操作中是否可行吗 以下是示例数据帧(请注意,值将不同,即每个矩阵中的值不同) 我想知道如何正确地组合最后一个操作。不确定OP是否想到了这一点,但通常(就像我的例子一样),人们只对k产品(Lambda.ix[k].dot(Sigma.ix[k]所有k)感兴趣,而不是k^2产品(Lambda.ix[I].dot(Sigma.ix[j]适用于i、j的所有组合 >>> Lambda.dot
我想知道如何正确地组合最后一个操作。不确定OP是否想到了这一点,但通常(就像我的例子一样),人们只对
k
产品(Lambda.ix[k].dot(Sigma.ix[k]
所有k
)感兴趣,而不是k^2
产品(Lambda.ix[I].dot(Sigma.ix[j]
适用于i、j的所有组合
>>> Lambda.dot(Sigma.T)
0 1 2 3
0 1 0 1 0 1 0 1
0 0 12.74109 -7.53549 12.74109 -7.53549 12.74109 -7.53549 12.74109 -7.53549
1 -7.53549 12.30817 -7.53549 12.30817 -7.53549 12.30817 -7.53549 12.30817
1 0 12.74109 -7.53549 12.74109 -7.53549 12.74109 -7.53549 12.74109 -7.53549
1 -7.53549 12.30817 -7.53549 12.30817 -7.53549 12.30817 -7.53549 12.30817
2 0 12.74109 -7.53549 12.74109 -7.53549 12.74109 -7.53549 12.74109 -7.53549
1 -7.53549 12.30817 -7.53549 12.30817 -7.53549 12.30817 -7.53549 12.30817
3 0 12.74109 -7.53549 12.74109 -7.53549 12.74109 -7.53549 12.74109 -7.53549
1 -7.53549 12.30817 -7.53549 12.30817 -7.53549 12.30817 -7.53549 12.30817
对于那些对前者感兴趣的人,这里有一个使用groupby
和concat
(meh)的版本。如果有一个直接的方法就好了,但你可以:
def drop_col_level(df, **kwds):
df.columns = df.columns.droplevel(**kwds)
return df
pd.concat([l.dot(drop_col_level(s.T, level=0))
for (_, l), (_, s) in zip(Lambda.groupby(level=0), Sigma.groupby(level=0))])
Out[151]:
1 0 1
0 1
0 0 12.74109 -7.53549
1 -7.53549 12.30817
1 0 12.74109 -7.53549
1 -7.53549 12.30817
2 0 12.74109 -7.53549
1 -7.53549 12.30817
3 0 12.74109 -7.53549
1 -7.53549 12.30817
不确定OP是否想到了这一点,但通常(就像在我的案例中),人们只对k
产品感兴趣(Lambda.ix[k].dot(Sigma.ix[k]
适用于所有k
)而不是k^2
产品(Lambda.ix[i].dot(Sigma.ix[j]
适用于i,j
)
对于那些对前者感兴趣的人,这里有一个使用groupby
和concat
(meh)的版本。如果有一个直接的方法就好了,但你可以:
def drop_col_level(df, **kwds):
df.columns = df.columns.droplevel(**kwds)
return df
pd.concat([l.dot(drop_col_level(s.T, level=0))
for (_, l), (_, s) in zip(Lambda.groupby(level=0), Sigma.groupby(level=0))])
Out[151]:
1 0 1
0 1
0 0 12.74109 -7.53549
1 -7.53549 12.30817
1 0 12.74109 -7.53549
1 -7.53549 12.30817
2 0 12.74109 -7.53549
1 -7.53549 12.30817
3 0 12.74109 -7.53549
1 -7.53549 12.30817
这是一个完整的k^2$个矩阵结果,即λ0 xσ0,λ0 xσ1,等等。有没有一种方法(不需要迭代)只得到“对角”积,即λk xσk?这是一个完整的k^2$个矩阵结果,即λ0 xσ0,λ0 xσ1,等等。有没有一种方法(不需要迭代)只得到“对角线”产品,即lambda_k x sigma_k?