2014-04-09 32 views
5

Cho một thưa thớt nhị phân ma trận A (csr, coo, bất cứ điều gì) Tôi muốn thực hiện một âm mưu như vậy mà tôi có thể nhìn thấy vị trí (i, j) = màu trắng trong hình nếu A (i, j) = 1, và (i, j) = màu đen nếu A (i, j) = 0;trăn cốt truyện matplotlib thưa thớt ma trận mẫu

Đối với một mảng NumPy dày đặc, matshow sẽ thực hiện công việc. Tuy nhiên, kích thước của ma trận thưa thớt của tôi (nói 100000 x 1000000) là lớn để được chuyển đổi thành một mảng dày đặc. Tôi tự hỏi làm thế nào tôi có thể âm mưu các mẫu trong ma trận thưa thớt của tôi.

Cảm ơn

Trả lời

18

Bạn có thể có được một kết quả tốt đẹp sử dụng một coo_matrix, plot() và một số điều chỉnh:

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 

Lưu ý rằng trục y được đảo ngược để đặt hàng đầu tiên ở phía trên cùng của hình. Một ví dụ:

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() 

enter image description here

+2

Cảm ơn bạn. Nó thực sự hữu ích !! Tìm hiểu rất nhiều từ mã của bạn :) – Jing

Các vấn đề liên quan