python - 获取numpy数组值的矩阵图像-内部像素值(非颜色)的网格

标签 python numpy

我在网上搜索,找不到任何符合我要求的内容。

我想将一个numpy数组另存为图像,但我不想使用彩色图像,而是希望以黑白表示像素值在其对应的网格位置中。

例如:

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

我想将其另存为如下所示的图像(.PNG):

expected output

我当前的代码创建了一个网格并将数字放置在其中,但是要调整所有内容使其在研究论文中显示出来是非常困难的。

因此,我没有在发布我过于复杂的代码,而是想知道是否有内置函数可以在几行代码中处理该问题。

最佳答案

我会使用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,所以改变外观非常容易:)

table

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

table2

关于python - 获取numpy数组值的矩阵图像-内部像素值(非颜色)的网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59078511/

相关文章:

python - CherryPy获取上传文件的临时位置

python - 二维数组 python 上的最小值

python - 用一维变量填充 3D numpy 数组

python - 绘制高精度数据

python - 如何根据小时标准获得每天每组的最小值

python - 为什么我的 Flask 应用程序会给出此响应 "class User(db.model): AttributeError: ' SQLAlchemy' 对象没有属性 'model' “?

python - 如何在 2D 中分析任意 3D 平面

用于散热的 Python numpy 矢量化

numpy - 使用 NumPy 避免联合概率的下溢

python - httplib 和 HTTPs 代理