python matplotlib plot patrón de matriz escasa

Dada una matriz binaria dispersa A (csr, coo, lo que sea) quiero hacer un gráfico tal que pueda ver la posición (i, j) = blanco en la figura si A (i, j) = 1, y (i, j) = negro si A (i, j) = 0;

Para una matriz de números densos, matshow hará el trabajo. Sin embargo, la dimensión de mi matriz dispersa (por ejemplo, 100000 x 1000000) es demasiado grande para convertirla en una matriz densa. Me pregunto cómo podría trazar el patrón en mi matriz dispersa.

Gracias

Puede obtener un buen resultado usando coo_matrix , plot() y algunos ajustes:

 import matplotlib.pyplot as plt from scipy.sparse import coo_matrix def plot_coo_matrix(m): if not isinstance(m, coo_matrix): m = coo_matrix(m) fig = plt.figure() ax = fig.add_subplot(111, axisbg='black') ax.plot(m.col, m.row, 's', color='white', ms=1) ax.set_xlim(0, m.shape[1]) ax.set_ylim(0, m.shape[0]) ax.set_aspect('equal') for spine in ax.spines.values(): spine.set_visible(False) ax.invert_yaxis() ax.set_aspect('equal') ax.set_xticks([]) ax.set_yticks([]) return ax 

Tenga en cuenta que el eje y se invierte para colocar la primera fila en la parte superior de la figura. Un ejemplo:

 import numpy as np from scipy.sparse import coo_matrix shape = (100000, 100000) rows = np.int_(np.round_(shape[0]*np.random.random(1000))) cols = np.int_(np.round_(shape[1]*np.random.random(1000))) vals = np.ones_like(rows) m = coo_matrix((vals, (rows, cols)), shape=shape) ax = plot_coo_matrix(m) ax.figure.show() 

introduzca la descripción de la imagen aquí

Hay una función ( spy ) en Matplotlib para eso:

equivalente scipy para MATLAB espía

http://matplotlib.org/examples/pylab_examples/spy_demos.html