我在网上搜索,找不到任何可以满足我想要的东西。
我想将一个 numpy 数组保存为一个图像,但不是有一个彩色图像,我想要像素值在相应网格位置的黑白表示。
例如:
import numpy as np
x = np.array([[1,2],[3,4]])
print(x)
# [[1 2]
# [3 4]]
Run Code Online (Sandbox Code Playgroud)
我想将其保存为如下所示的图像 (.PNG):
我当前的代码创建了一个网格并将数字放在里面,但是很难调整所有内容以使其在研究论文中呈现出来。
因此,与其发布我过于复杂的代码,我想知道是否有一个内置函数可以在几行代码中处理这个问题。
Sol*_*lou 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")
Run Code Online (Sandbox Code Playgroud)
这里preview
使用了文档类,它返回一个根据文档内容(即表格)调整大小的图像。仅使用tabular
环境来呈现数据。单元格之间有横条和竖条,但很容易改变这一点。在变量中tab
,数据针对每一行进行处理并转换为字符串。请注意,您必须在此位置指定输出格式。我将其设置为%d
所有内容都转换为整数。
如果您想直接在乳胶源中使用的表,你必须删除documentclass
和\begin{document}
以及\end{document}
中的变量start
和end
。最后,所有东西都放在一个乳胶源中,然后作为table.tex
. 如果您最终只想要图像,则将生成的文件编译为table.pdf
.
这是输出的样子。但就像我说的,因为它是 LaTeX,所以很容易改变外观:)
这是另一个示例,其中包含一个大矩阵 (14 x 14),其中填充了从 0 到 100 的随机数:
您可以使用 的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')
Run Code Online (Sandbox Code Playgroud)
可以通过更改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')
Run Code Online (Sandbox Code Playgroud)