Я должен выполнить точечное произведение между 2D и 3D массивами, что нормально работает для numpy массивов. Однако, когда двумерный массив имеет разреженный формат, его метод .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 приведет к выходу, который я ищу, test2 выдаст ошибку. Как можно эффективно выполнить эту операцию, не вызывая метод .todense()
?