Продукт Scipy Sparse dot с трехмерным массивом - PullRequest
0 голосов
/ 06 марта 2020

Я должен выполнить точечное произведение между 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()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...