我在网上搜索,找不到任何符合我要求的内容。
我想将一个numpy数组另存为图像,但我不想使用彩色图像,而是希望以黑白表示像素值在其对应的网格位置中。
例如:
import numpy as np
x = np.array([[1,2],[3,4]])
print(x)
# [[1 2]
# [3 4]]
我想将其另存为如下所示的图像(.PNG):
我当前的代码创建了一个网格并将数字放置在其中,但是要调整所有内容使其在研究论文中显示出来是非常困难的。
因此,我没有在发布我过于复杂的代码,而是想知道是否有内置函数可以在几行代码中处理该问题。
最佳答案
我会使用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
,以便将所有内容都转换为整数。如果要直接在 latex 源中使用该表,则必须删除
documentclass
和\begin{document}
变量中的\end{document}
和start
以及end
。最后,所有内容都放在一个 latex 源中,然后以table.tex
的形式存储到磁盘中。如果只需要最后一个图像,则将生成的文件编译为table.pdf
。这是输出的样子。但是就像我说的那样,因为它是LaTeX,所以改变外观非常容易:)
这是另一个示例,其中有一个大矩阵(14 x 14),其中填充了从0到100的随机数:
关于python - 获取numpy数组值的矩阵图像-内部像素值(非颜色)的网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59078511/