Python 具有3D阵列的Scipy稀疏点积
我必须在2D和3D阵列之间执行点积,这对于numpy阵列来说很好。但是,当2D数组为稀疏格式时,其Python 具有3D阵列的Scipy稀疏点积,python,numpy,scipy,sparse-matrix,Python,Numpy,Scipy,Sparse Matrix,我必须在2D和3D阵列之间执行点积,这对于numpy阵列来说很好。但是,当2D数组为稀疏格式时,其.dot()方法的行为方式不同,并引发以下错误: ValueError:无法解释维度 以下是这种情况的一个例子: 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 ran
.dot()
方法的行为方式不同,并引发以下错误:
ValueError:无法解释维度
以下是这种情况的一个例子:
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()
方法的情况下,如何高效地执行此操作?Asparse.matrix
根据定义是2dmatrix
P
是稀疏的,P.T
也是稀疏的。在P.T.dot(…)中使用时,它尝试进行2d矩阵乘法。如果参数也是稀疏的,则结果将是稀疏的。如果参数是稠密的,(numpy数组),则结果也是稠密的。但是没有处理3d数组的规定。你能把计算写成3个点积吗?重塑C
到(36303),进行2d计算,并根据需要重塑。谢谢,我会尝试将C
重塑为2d数组,重塑点积的输出。