Я использую scipy
для матричного умножения разреженной матрицы. По какой-то причине метод .power()
не работает для разреженной матрицы. Я проверил его, используя три метода:
Вот мой код:
import scipy as sp
import scipy.sparse
Метод 1: Предельное матричное умножение
row = np.array([0, 3, 1, 0])
col = np.array([0, 3, 1, 2])
data = np.array([4, 5, 7, 9])
P1 = sp.sparse.coo_matrix((data, (row, col)), shape=(4, 4))
#Method 1
P1.power(4).todense() #gives wrong result
Результат:
matrix([[ 256, 0, 6561, 0], #6561 isn't right
[ 0, 2401, 0, 0],
[ 0, 0, 0, 0],
[ 0, 0, 0, 625]], dtype=int32)
Способ 2:
P = P1.copy()
#calculate ^4
for loop in range(2):
P = P.dot(P)
P.todense()
Выход
matrix([[ 256, 0, 576, 0],
[ 0, 2401, 0, 0],
[ 0, 0, 0, 0],
[ 0, 0, 0, 625]], dtype=int32)
method3
P1.dot(P1).dot(P1).dot(P1).todense()
Выход:
matrix([[ 256, 0, 576, 0],
[ 0, 2401, 0, 0],
[ 0, 0, 0, 0],
[ 0, 0, 0, 625]], dtype=int32)
Способ 4:
Можно проверить результат на этом сайте (symbolab.com)
Другие темы на эту тему ( Element-wise power of scipy.sparse matrix , Матрица для разреженной матрицы в python ), сосредоточиться на том, как делать умножение матрицы. Буду признателен за любую помощь.
Всего 1 ответ
Вы можете использовать **
обозначение:
(P1**4).todense()
Результат:
[[ 256 0 576 0]
[ 0 2401 0 0]
[ 0 0 0 0]
[ 0 0 0 625]]
EDIT: Относительно того, почему .power()
не возвращает ожидаемый результат:
- как упоминал Зинки в своем комментарии :
p.power(2)
- «элементная сила».9**4
=6561
.