Как выполнить следующее разреженное матричное вычитание? - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь выполнить следующее вычитание массива в Python:

import numpy as np
from scipy.sparse import csr_matrix
a = np.array([[1, 2], [3, 4]])  
b = a[:, None] - a[None, :]
sum_ = np.sum(b, axis=-1)
print(sum_)

Кажется, что вышеприведенное работает. Однако, если я изменяю вышеуказанный массив a на разреженную матрицу:

a = csr_matrix(a)

и точно выполняю вышеуказанные шаги, я получаю ошибку:

IndexError: Index dimension must be <= 2

Любые идеи о том, как это исправить?

1 Ответ

1 голос
/ 19 апреля 2020
Вещание в стиле

numpy не реализовано для разреженных матриц. a[:, None] не поддерживается для разреженных матриц, и в вашем вычитании a[:, None] и a[None, :] имеют разные формы.

Ваше разреженное матричное вычитание может быть получено, если вы выполняете вещание до преобразования в разреженный матрица, и если обе части вычитания имеют одинаковую форму. Например:

a = np.array([[1, 2], [3, 4]])
b = np.array([[1, 1], [1, 1]])
c = csr_matrix(a) - csr_matrix(b)
sum = np.sum(c)
print(csr_matrix.toarray(c))
print(sum)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...