Я пытаюсь получить максимальную производительность от numpy, и мне было интересно, есть ли лучший способ вычислить точечный продукт с массивом, в котором много нулей, например:
a = np.array([[0, 3, 0], [1, 0, 1]])
print a.dot([1, 2, 5])
это небольшой пример, но если бы у нас был массив гораздо большего масштаба, в котором, скажем, 80% нулей в любом месте массива, мой вопрос был бы в том, есть ли лучший или предпочтительно более быстрый способ вычисления скалярного произведения, когда их так много нули?
scipy.sparse
, который создает и использует разреженные матрицы. Но по моему опыту матрица должна иметь разреженность ниже 1%, чтобы получить преимущество в скорости надnumpy
dot
(т.е. 99% нулей). - person hpaulj   schedule 18.02.2017dot
. Первоначально они были разработаны для больших задач линейной алгебры (конечный элемент, разность), но теперь также используют машинное обучение. Для чего еще вы используете эти матрицы? - person hpaulj   schedule 18.02.2017sparse.csr_matrix(dense_array)
транспонировать так же дешево, как и с плотными матрицами, а основные операции имеют тот же синтаксис. Чтобы вернуться, используйтеsparse_matrix.todense().A
, если только вы действительно не хотитеmatrix
, а неarray
, и в этом случае пропустите.A
. - person Paul Panzer   schedule 18.02.2017