给定一个稀疏的二进制矩阵A(csr,coo,等等)我想制作一个图,这样我可以看到图中的位置(i,j)= white,如果A(i,j)= 1, (i,j)=黑色,如果A(i,j)= 0;
对于密集的numpy数组,matshow将完成这项工作。但是,我的稀疏矩阵的维度(比如说100000 x 1000000)要大到可以转换为密集阵列。我想知道如何在稀疏矩阵中绘制模式。
由于
答案 0 :(得分:18)
您可以使用coo_matrix
,plot()
和一些调整获得不错的结果:
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
请注意,y
轴被反转,以将第一行放在图的顶部。一个例子:
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()
答案 1 :(得分:6)
Matplotlib中有一个函数(spy
):
scipy equivalent for MATLAB spy
http://matplotlib.org/examples/pylab_examples/spy_demos.html