numpy.square
, кажется, дает неправильный вывод, когда scipy.sparse
матрицы передаются ему:numpy.square возвращает неправильный результат для разреженных матриц
import numpy as np
import scipy.sparse as S
a = np.array([np.arange(5), np.arange(5), np.arange(5), np.arange(5), np.arange(5)])
a
# array([[0, 1, 2, 3, 4],
# [0, 1, 2, 3, 4],
# [0, 1, 2, 3, 4],
# [0, 1, 2, 3, 4],
# [0, 1, 2, 3, 4]])
np.square(a)
# array([[ 0, 1, 4, 9, 16],
# [ 0, 1, 4, 9, 16],
# [ 0, 1, 4, 9, 16],
# [ 0, 1, 4, 9, 16],
# [ 0, 1, 4, 9, 16]])
b = S.lil_matrix(a)
c = np.square(b)
c
# <5x5 sparse matrix of type '<class 'numpy.int64'>'
# with 20 stored elements in Compressed Sparse Row format>
c[2,2]
# 20
# Expected output is 4, as in np.square(a) output above.
Является ли это ошибка?
Документация 'np.square' говорит, что она выполняет элементное умножение. Он делает это для объектов 'np.matrix'. По какой-то сообразительной причине, с «разреженными» матричными объектами, он выполняет матричное умножение. Вызывающий стек, я думаю, представляет собой сочетание кода C и Python, которое сложно выполнить. – hpaulj