numpy 배열 값의 행렬 이미지 가져 오기-픽셀 값이 포함 된 그리드 (컬러 아님)


9

온라인으로 검색했는데 원하는 것을 수행하는 내용을 찾을 수 없었습니다.

numpy 배열을 이미지로 저장하고 싶지만 화려한 이미지 대신 픽셀 값을 해당 그리드 위치에 흑백으로 표시하고 싶습니다.

예를 들면 다음과 같습니다.

import numpy as np
x = np.array([[1,2],[3,4]])
print(x)
# [[1 2]
#  [3 4]]

이것을 다음과 같은 이미지 (.PNG)로 저장하고 싶습니다.

예상 출력

현재 코드는 그리드를 만들고 숫자를 내부에 배치하지만 연구 논문에 표시 할 수 있도록 모든 것을 조정하는 것은 매우 어렵습니다.

그래서 지나치게 복잡한 코드를 게시하는 대신 몇 줄의 코드로 처리 할 수있는 내장 함수가 있는지 궁금합니다.


1
table시작하기에 좋은 장소 인 것 같습니다 . 나는 좋은 대답을 줄만큼 그것을 사용하지 않았습니다.
워렌 베 케서

1
를 사용하는 예는 '테이블 데모' 를 참조하십시오 table.
워렌 베 케서

4
래스터 이미지가 아닌 종이에 넣을 테이블에 LaTeX를 사용합니다.
alkasm

@alkasm 내 실제 매트릭스가 훨씬 더 크며 (14x14 또는 28x28) 많은 이미지를 만들어야하므로 LaTex에서 수동으로 수행하는 것은 매우 비효율적 인 방법 인 것 같습니다.
lbragile

5
반대로, 이미지를 래스터 화하는 것은 비효율적 인 방법처럼 들립니다. 데이터 테이블은 이미지가 아니므로 그렇게 취급해서는 안됩니다. 수동으로도 매우 쉽게 LaTeX를 자동 생성 할 수 있습니다.
alkasm

답변:


12

LaTeX를 사용하여 테이블을 생성 할 수 있습니다. 테이블이 멋져 보이고 이미지를 생성하거나 문서에 직접 넣을 수 있기 때문입니다. 이것을 달성하기 위해 다음 코드를 사용했습니다.

#!/usr/bin/env
import numpy as np
import os

x = np.array([[1,2],[3,4]])

def generateLatexTable(x):
    start = [r'\documentclass[preview]{standalone}', r'\begin{document}', r'\begin{tabular}{%s}' % ('{1}{0}{1}'.format('|'.join(['r'] * x.shape[1]), '|')), r'\hline']
    tab = [' & '.join(['%d' % val for val in row]) + r' \\ \hline' for row in x]
    end = [r'\end{tabular}', r'\end{document}']
    text = '\n'.join(start + tab + end)

    return text

with open('table.tex', 'w') as f:
    f.write(generateLatexTable(x))
os.system("pdflatex table.tex")

여기서 문서 클래스 preview는 문서 의 내용, 즉 테이블로 크기가 조정 된 이미지를 반환하는 데 사용됩니다. tabular환경 만 데이터를 표시하는 데 사용됩니다. 셀 사이에 가로 막대와 세로 막대가 있지만이를 변경하는 것은 매우 쉽습니다. 변수 tab에서 데이터는 각 행에 대해 처리되고 문자열로 변환됩니다. 이 위치에서 출력 형식을 지정해야합니다. %d모든 것이 정수로 변환되도록 설정했습니다 .

당신은 라텍스 소스에 직접 테이블을 사용하려는 경우, 당신은 제거해야 documentclass하고 \begin{document}뿐만 아니라 \end{document}의 변수 startend. 마지막으로 모든 것이 라텍스 소스에 모여 디스크에 다음과 같이 저장됩니다 table.tex. 결국 이미지를 원하면 결과 파일이로 컴파일됩니다 table.pdf.

출력 결과는 다음과 같습니다. 그러나 내가 말했듯이 LaTeX이기 때문에 모양을 변경하는 것은 매우 쉽습니다. :)

표

다음은 0에서 100 사이의 난수로 채워진 큰 행렬 (14 x 14)을 가진 또 다른 예입니다.

표 2


8

table기능을 사용 matplot하여 단순 테이블을 플로팅 할 수 있습니다 . 또한 플롯을 PNG로 저장할 수 있습니다. 다음은 요구 사항에 대한 간단한 코드입니다.

import numpy as np
import matplotlib.pyplot as plt

x = np.array([[1,2],[3,4]])

plt.figure()
plt.table(cellText=x,cellLoc='center',loc='center')
plt.axis('off')
plt.savefig('table.png')

figsize줄의 매개 변수를 변경하여 플롯 또는 이미지의 크기를 조정할 수 있습니다 .plt.figure(figsize=(x,y))

더 나은 외관을 위해 다음과 같이 수정할 수 있습니다.

import numpy as np
import matplotlib.pyplot as plt

x = np.array([[1,2],[3,4]])

fig = plt.figure(figsize=(2,2))
plt.axis('off')
plt.axis('tight')
plt.table(cellText=x,cellLoc='center',loc='center')
#plt.subplots_adjust(hspace=0.5)
fig.tight_layout()
plt.savefig('table.png')

3
나는 거의 같은 것을 할 것입니다fig = plt.figure(figsize = x.shape)
Daniel F

4

이것이 도움이 될 수 있습니다.

from matplotlib import pyplot as plt
import numpy as np

w  = 10
h  = 10 
img = np.random.randint(255, size=(w, h))
plt.figure(figsize=(5,8))
plt.imshow(img, interpolation='nearest')
plt.axis('off')

cellTextimg =  []
for j in range(0,h):
    cellTextimg.append(img[j,:])

the_table = plt.table(cellText= cellTextimg, loc='bottom')
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.