सुपीरियर सरणी मानों की मैट्रिक्स छवि प्राप्त करें - अंदर पिक्सेल मूल्यों के साथ ग्रिड (रंग नहीं)


9

मैंने ऑनलाइन खोज की और इस बारे में कुछ भी नहीं पाया कि मुझे क्या चाहिए।

मैं एक छवि के रूप में एक सुपीरियर सरणी को सहेजना चाहता हूं, लेकिन एक रंगीन छवि होने के बजाय, मैं उनके संबंधित ग्रिड स्थान में पिक्सेल मूल्यों का एक काला और सफेद प्रतिनिधित्व चाहता हूं।

उदाहरण के लिए:

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

मैं इसे एक छवि (.PNG) के रूप में सहेजना चाहूंगा जो निम्न प्रकार दिखाई देती है:

अपेक्षित उत्पादन

मेरा वर्तमान कोड एक ग्रिड बनाता है और संख्याओं को अंदर रखता है लेकिन एक शोध पत्र में इसे प्रस्तुत करने योग्य बनाने के लिए सब कुछ समायोजित करना बहुत मुश्किल है।

इसलिए मेरे अति जटिल कोड को पोस्ट करने के बजाय, मैं सोच रहा था कि क्या कोड की कुछ पंक्तियों में इसे संभालने के लिए कोई फ़ंक्शन है।


1
ऐसा लगता है कि tableशुरू करने के लिए एक अच्छी जगह होगी। मैंने इसका अच्छा जवाब देने के लिए पर्याप्त उपयोग नहीं किया है।
वॉरेन वीकेसर

1
उदाहरण के लिए 'टेबल डेमो' देखें जो उपयोग करता है table
वॉरेन वीकेसर

4
मैं एक तालिका के लिए LaTeX का उपयोग करूंगा, जिसे आप एक पेपर में डालने की कोशिश कर रहे हैं, जैसा कि एक रेखापुंज छवि के विपरीत है।
अल्कमास

@ मलमास की बात यह है कि मेरे वास्तविक मैट्रिसेज़ बहुत बड़े हैं (14x14 या 28x28) और मुझे उनके लिए कई चित्र बनाने की आवश्यकता है, इसलिए मैन्युअल रूप से लाटेक्स में ऐसा करना एक बहुत ही अक्षम तरीका लगता है।
lbragile

5
इसके विपरीत, छवियों को रेखापुंज करना अक्षम विधि की तरह लगता है। डेटा की तालिकाएँ चित्र नहीं हैं, और इसलिए इसे ऐसा नहीं माना जाना चाहिए। आप बहुत आसानी से मैन्युअल रूप से, लाटेक्स को ऑटो उत्पन्न कर सकते हैं।
अल्कमास डेम 5'19

जवाबों:


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}के चर में startऔर end। अंत में, सब कुछ एक लेटेक्स-स्रोत में एक साथ रखा जाता है जिसे बाद में डिस्क के रूप में संग्रहीत किया जाता है table.tex। यदि आप अंत में छवि चाहते हैं, तो परिणामी फ़ाइल संकलित की जाती है table.pdf

यहाँ वही है जो आउटपुट दिखता है। लेकिन जैसा मैंने कहा, यह बहुत आसान है क्योंकि यह LaTeX है:

तालिका

यहां एक बड़ी मैट्रिक्स (14 x 14) के साथ एक और उदाहरण है, 0 से 100 तक यादृच्छिक संख्याओं से भरा:

तालिका 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)
डैनियल एफ

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')
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.