python matplotlib绘制稀疏矩阵模式

python matplotlib绘制稀疏矩阵模式,python,numpy,matplotlib,scipy,sparse-matrix,Python,Numpy,Matplotlib,Scipy,Sparse Matrix,给定一个稀疏的二元矩阵a(csr,coo,随便什么),我想画一个图,这样我可以看到位置(I,j)=白色,如果a(I,j)=1,和(I,j)=黑色,如果a(I,j)=0 对于密集的numpy阵列,matshow将完成这项工作。但是,我的稀疏矩阵(比如100000 x 1000000)的维数太大,无法转换为密集数组。我想知道如何在稀疏矩阵中绘制模式 谢谢使用coo_矩阵,plot()和一些调整,您可以得到一个很好的结果: import matplotlib.pyplot as plt from sc

给定一个稀疏的二元矩阵a(csr,coo,随便什么),我想画一个图,这样我可以看到位置(I,j)=白色,如果a(I,j)=1,和(I,j)=黑色,如果a(I,j)=0

对于密集的numpy阵列,matshow将完成这项工作。但是,我的稀疏矩阵(比如100000 x 1000000)的维数太大,无法转换为密集数组。我想知道如何在稀疏矩阵中绘制模式


谢谢

使用
coo_矩阵
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, facecolor='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()

Matplotlib中有一个函数(
spy
)用于:


谢谢。这真的很有帮助!!从您的代码中学到很多:)