获取 numpy 数组值的矩阵图像 - 内部包含像素值的网格(不是颜色)

lbr*_*ile 9 python numpy

我在网上搜索,找不到任何可以满足我想要的东西。

我想将一个 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}中的变量startend。最后,所有东西都放在一个乳胶源中,然后作为table.tex. 如果您最终只想要图像,则将生成的文件编译为table.pdf.

这是输出的样子。但就像我说的,因为它是 LaTeX,所以很容易改变外观:)

桌子

这是另一个示例,其中包含一个大矩阵 (14 x 14),其中填充了从 0 到 100 的随机数:

表2


Ash*_*'Sa 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')

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)

  • 我几乎会做类似“fig = plt.figure(figsize = x.shape)”的事情 (3认同)