Pandas 将一个Panda矩阵部分乘以另一个

Pandas 将一个Panda矩阵部分乘以另一个,pandas,matrix,Pandas,Matrix,我想从两个熊猫矩阵创建一个新的熊猫矩阵 如果没有一个例子,我不知道如何准确地描述我的问题 那么,我的矩阵A: 1 2 3 4 5 1 0.821124 0.767681 0.639456 0.131096 0.398733 2 0.108253 0.865229 0.285755 0.409036 0.398622 3 0.529245 0.9

我想从两个熊猫矩阵创建一个新的熊猫矩阵

如果没有一个例子,我不知道如何准确地描述我的问题

那么,我的矩阵A:

    1               2           3           4         5
1   0.821124    0.767681    0.639456    0.131096   0.398733
2   0.108253    0.865229    0.285755    0.409036   0.398622
3   0.529245    0.989824    0.283102    0.392597   0.983236
4   0.699661    0.828631    0.404465    0.027329   0.936447
5   0.983737    0.262978    0.387633    2.228383   0.677531
我的矩阵B:

            A                       B
            a           b           a          b
A   a   0.090075    0.550466    0.748526    0.338671
    b   0.577898    0.005927    0.718440    0.482596
B   a   0.042174    0.332807    0.214504    0.781927
    b   0.819624    0.066917    0.372023    0.459321
我想得到一个矩阵C:

            A                                B
            a                 b              a               b
            1        2        3       4      5       2       3       4
A   a   1   NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
        2   NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
    b   3   NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
        4   NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
B   a   5   NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
        2   NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
    b   3   NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
        4   NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
并填写每个单元格的排序

C((A,b,3)(A,a,1))= A((3)(1))*B((A,b)(A,a))
这里,(A,b,2)是行,(A,A,1)是列。例如:

C((A,b,3)(A,a,1)) = 0.529245 * 0.577898.
C((B,b,4)(A,a,2)) = 0.828631 * 0.819624
我成功地用Panda的循环和C.loc构建了这个C矩阵。但是它非常慢。我的矩阵A约为2000*10000,矩阵B约为4000*4000,矩阵C约为400000*400000(与本例相比,还有一个级别)

看起来我用A乘以B来表示每一秒的C,但是这里A和C的索引并不总是匹配的

我怎样才能在不掉头发的情况下处理这件事。 提前谢谢


我现在优化我的演算的唯一方法是用MPI将我的作品除以核心。但是它仍然很慢。

你能分享关于如何设置NaN填充的代码吗
C
?我通过对RDF数据库的查询创建了我的索引。所以很难共享代码。但是我可以很容易地用C的适当索引获得dict,我通过以下命令生成矩阵:
import pandas as pd
index=pd.MultiIndex.from_元组({('A','1'),('A','2'),('B','1'),('B','2'))
pd.DataFrame(index=index,columns=index)
你能分享关于如何设置NaN填充的代码吗
C
?我通过对RDF数据库的查询创建了索引。所以很难共享代码。但是我可以很容易地用C的适当索引获得dict,我通过以下命令生成矩阵:
import pandas as pd
index=pd.MultiIndex.from_元组({('A','1'),('A','2'),('B','1'),('B','2'))
pd.DataFrame(index=index,columns=index)