달나라 노트

Python matplotlib : spy (sparsity pattern, 희소성 패턴 그래프) 본문

Python/Python matplotlib

Python matplotlib : spy (sparsity pattern, 희소성 패턴 그래프)

CosmosProject 2024. 4. 5. 19:13
728x90
반응형

 

 

 

데이터를 보다 보면 Sparcity pattern이라는 개념을 접하게 됩니다.

한글로 번역을 해보면 희소성 패턴이라고 하죠.

 

sparce -> 부족한, 희박한

sparcity -> 부족, 희박함

 

단어의 뜻을 보자면 위와 같습니다.

 

이러한 sparcity pattern을 그래프로 나타내주는 것이 matplotlib의 spy라는 method라고 합니다.

 

 

Syntax

spy(
    Z=2D-array,
    precision=value
)

 

spy method에서 주로 사용하는 parameter는 위와 같습니다.

 

- Z

2차원 array를 받습니다.

Sparcity pattern 그래프를 그릴 때 사용되는 데이터입니다.

 

- precision

precision = 0이라면 Z에서 0이 아닌 모든 값에 대해 graph가 plot됩니다.

precision = x라면 |Z| > precision인 값에 대해서만 graph가 plot됩니다.

 

 

 

 

 

직접 예시를 보죠.

 

 

 

import matplotlib.pyplot as plt


list_test = [
    [0, 1, 2, 3, 4],
    [1, 2, 3, 4, 5],
    [2, 3, 4, 5, 6],
    [3, 4, 5, 6, 7]
]

plt.spy(Z=list_test,  # 2차원 list or 2차원 array
        precision=0   # plot 숫자 기준
        )

plt.show()

 

 

 

위 코드를 실행시킨 결과입니다.

 

2차원 list를 전달했고 이 list에는 여러 값이 있습니다.

보면 (0, 0)만 흰색이고 나머지는 다 검은색입니다.

왜냐면 2차원 list에서 왼쪽 가장 위에 있는 값만 0이기 때문입니다. 또한 precision=0으로 설정되었기 때문에 0이 아닌 값들에 대해 검정색으로 칠해진 sparcity pattern graph가 그려집니다.

 

 

 

 

 

 

import matplotlib.pyplot as plt


list_test = [
    [0, 1, 2, 3, 4],
    [1, 2, 3, 4, 5],
    [2, 3, 4, 5, 6],
    [3, 4, 5, 6, 7]
]

plt.spy(Z=list_test, precision=2)

plt.show()

 

precision=2로 설정했습니다.

 

 

precision=2로 설정되었기 때문에

|Z| > 2인 값에 대해서만 검은색으로 칠해지며 sparcity pattern graph가 그려집니다.

 

그래서 절대값이 2 이하인 값의 위치는 검은색이 되지 않습니다.

 

 

 

 

 

import matplotlib.pyplot as plt


list_test = [
    [-2, -1, -10, 2, 4],
    [1, 2, 0, 4, 5],
    [2, 3, 4, 5, 6],
    [3, 4, 5, 6, 7]
]

plt.spy(Z=list_test, precision=0)

plt.show()

 

이번엔 2차원 array에 음수를 넣어보았습니다.

 

 

spy에서 plot을 하는 기준을 |Z| > precision 으로 Z의 절대값을 보기 때문에

음수값들도 검은색으로 칠해지며 plot이 됩니다.

 

 

 

 

 

 

import matplotlib.pyplot as plt


list_test = [
    [-2, -1, -10, 2, 4],
    [1, 2, 0, 4, 5],
    [2, 3, 4, 5, 6],
    [3, 4, 5, 6, 7]
]

plt.spy(Z=list_test, precision=2)

plt.show()

 

 

이번에는 precision=2로 설정해 보았습니다.

 

|Z| > 2인 값만 plot되므로

따라서 음수건 양수건 절대값이 2를 초과하는 값의 위치만 검은색으로 칠해지며 나타내어집니다.

 

 

 

 

 

 

import matplotlib.pyplot as plt


list_test = [
    [-2, -1, -10, 2, 4],
    [1, 2, 0, 4, 5],
    [2, 3, 4, 5, 6],
    [3, 4, 5, 6, 7]
]

plt.spy(Z=list_test, precision=-1)

plt.show()

 

precision=-1로 설정한 예시입니다.

|Z| > -1인 값만 plot되기 때문에 이런 경우 모든 값이 조건을 만족하므로 그래프 상의 모든 값이 검은색으로 칠해집니다.

 

 

 

 

 

 

아래는 spy method의 기타 parameter들입니다.

 

import matplotlib.pyplot as plt


list_test = [
    [-2, -1, -10, 2, 4],
    [1, 2, 0, 4, 5],
    [2, 3, 4, 5, 6],
    [3, 4, 5, 6, 7]
]

plt.spy(Z=list_test, precision=0,
        markersize=10)

plt.show()

 

 

markersize=10으로 설정한 예시입니다.

marker의 크기가 10으로 설정됩니다.

 

 

 

 

 

 

 

 

import matplotlib.pyplot as plt


list_test = [
    [-2, -1, -10, 2, 4],
    [1, 2, 0, 4, 5],
    [2, 3, 4, 5, 6],
    [3, 4, 5, 6, 7]
]

plt.spy(Z=list_test, precision=0,
        markersize=10,
        markeredgecolor='red',  # marker 테두리 색상
        markeredgewidth=2,  # marker 테두리 두께
        markerfacecolor='green'  # marker 색상
        )

plt.show()

 

 

markeredgecolor -> marker 테두리 색상을 결정합니다.

markeredgewidth -> marker 테두리 두께를 결정합니다.

markerfacecolor -> marker의 색상을 결정합니다.

 

 

 

 

 

 

 

import matplotlib.pyplot as plt


list_test = [
    [-2, -1, -10, 2, 4],
    [1, 2, 0, 4, 5],
    [2, 3, 4, 5, 6],
    [3, 4, 5, 6, 7]
]

plt.spy(Z=list_test, precision=0,
        markersize=10,
        markeredgecolor='red',  # marker 테두리 색상
        markeredgewidth=2,  # marker 테두리 두께
        markerfacecolor='green',  # marker 색상
        alpha=0.3  # marker 투명도
        )

plt.show()

 

 

alpha -> 투명도를 의미합니다. 0 이상 1 이하의 실수를 값으로 받으며 0은 완전한 투명, 1은 완전한 불투명을 의미합니다.

 

 

 

 

 

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(1)
arr_test = np.random.randn(20, 30)

arr_test[10, :] = 0
arr_test[:, 20] = 0

row_cnt = 2
col_cnt = 2

fig, graph = plt.subplots(nrows=row_cnt, ncols=col_cnt)

for r in range(row_cnt):
    for c in range(col_cnt):
        graph[r][c].spy(Z=arr_test, precision=0.3)

plt.show()

 

numpy와 함께 위같은 코드도 작성할 수 있습니다.

 

 

 

 

 

 

 

- 참고

아래 링크는 spy method 관련 참고할만한 문서입니다.

https://www.geeksforgeeks.org/how-to-visualize-sparse-matrix-in-python-using-matplotlib/

 

How To Visualize Sparse Matrix in Python using Matplotlib? - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

 

 

 

 

728x90
반응형
Comments