簡體   English   中英

使用einsum拆分矩陣乘法

[英]Splitting matrix multiplication using einsum

我有一個大數據矩陣,我想計算該大矩陣的相似性矩陣,但是由於內存限制,我想拆分計算。

假設我有以下內容:例如,我采用了一個較小的矩陣

data1 = data/np.linalg.norm(data,axis=1)[:,None]

(Pdb) data1
array([[ 0.        ,  0.        ,  0.        , ...,  0.        ,
         0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.        , ...,  0.        ,
         0.        ,  0.        ],
       [ 0.04777415,  0.00091094,  0.01326067, ...,  0.        ,
         0.        ,  0.        ],
       ...,
       [ 0.        ,  0.01503281,  0.00655707, ...,  0.        ,
         0.        ,  0.        ],
       [ 0.00418038,  0.00308079,  0.01893477, ...,  0.        ,
         0.        ,  0.        ],
       [ 0.06883803,  0.        ,  0.0209448 , ...,  0.        ,
         0.        ,  0.        ]])

我嘗試執行以下操作:

similarity_matrix[n1:n2,m1:m2] = np.einsum('ik,jk->ij', data1[n1:n2,:], data1[m1:m2,:])

n1,n2,m1,m2的計算如下:(df是一個數據幀)

data = df.values
m, k = data.shape
n1=0; n2=m/2; m1=n2+1; m2=m;

但是錯誤是:

(Pdb) similarity_matrix[n1:n2,m1:m2] = np.einsum('ik,jk->ij', data1[n1:n2,:], data1[m1:m2,:])
*** NameError: name 'similarity_matrix' is not defined

你不是在做像

similarity_matrix = np.empty((N,M),dtype=float)

在您的計算開始時?

創建數組之前,不能在等式的右側或左側對數組進行索引。

如果完整的(N,M)矩陣對於內存而言太大,則只需將einsum值分配給另一個變量,然后使用該變量即可。

partial_matrix = np.einsum...

您如何將partial_matrix與虛擬similarity_matrix partial_matrix相關聯是另一個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM