Scipy эквивалент для шпиона MATLAB

Я портировал код для алгоритма isomap из MATLAB в Python. Я пытаюсь визуализировать шаблон разреженности с помощью функции spy.

Команда MATLAB:

spy(sparse(A));
drawnow;

Команда Python:

matplotlib.pyplot.spy(scipy.sparse.csr_matrix(A))
plt.show()

Я не могу воспроизвести результат MATLAB в Python, используя приведенную выше команду. Использование команды с только A в не разреженном формате дает аналогичный результат MATLAB. Но он занимает довольно много времени (A 2000-к-2000). Каким будет эквивалент MATLAB для разреженной функции для scipy?

Ответ 1

Может быть, ваша версия matplotlib создает проблемы, так как для меня scipy.sparse и matplotlib.pylab работают хорошо.

См. пример кода ниже, который создает привязку "шпион".

import matplotlib.pylab as plt
import scipy.sparse as sps
A = sps.rand(10000,10000, density=0.00001)
M = sps.csr_matrix(A)
plt.spy(M)
plt.show()

# Returns here '1.3.0'
matplotlib.__version__

Это дает этот график: enter image description here

Ответ 2

С меньшими маркерами:

import matplotlib.pylab as pl
import scipy.sparse as sps
import scipy.io
import sys
A=scipy.io.mmread(sys.argv[1])
pl.spy(A,precision=0.01, markersize=1)
pl.show()

Ответ 3

Я только что выпустил Betterspy, который, возможно, делает лучше здесь. Установить с

pip3 install betterspy --user

и беги с

import betterspy
from scipy import sparse

A = sparse.rand(20, 20, density=0.1)
betterspy.show(A)
betterspy.write_png("out.png", A)

enter image description here