具有3D阵列的Scipy稀疏点积

2024-10-19 21:30:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须在2D和3D阵列之间执行点积,这对于numpy阵列来说很好。但是,当2D数组为稀疏格式时,其.dot()方法的行为方式不同,并引发以下错误:

ValueError: could not interpret dimensions

以下是这种情况的一个例子:

import numpy as np
import scipy as sp

Cshape = (36, 3, 101)
Pshape = (36, 36)

C = np.zeros(Cshape)
for i in range(Cshape[0]):
    for j in range(Cshape[1]):
        for k in range(Cshape[2]):
            C[i,j,k] = (i+1)*100+(j+1)*10+k+1

P = np.zeros(Pshape)
for i in range(Pshape[0]):
    for j in range(Pshape[1]):
        P[i,j] = i*j

test1 = P.T.dot(np.swapaxes(C,0,1))

P = sp.sparse.csr_matrix(P)
test2 = P.T.dot(np.swapaxes(C,0,1))

测试1将导致我正在寻找的输出,测试2将抛出一个错误。如果不调用.todense()方法,如何高效地执行此操作


Tags: 方法inimportnumpyforas错误np