将矩阵转换为图像

21 投票
3 回答
24693 浏览
提问于 2025-04-16 10:53

我该如何把一个包含整数列表的列表转换成一个矩阵图,在Python中实现呢?

这里有一个示例数据集:

[[3, 5, 3, 5, 2, 3, 2, 4, 3, 0, 5, 0, 3, 2],
 [5, 2, 2, 0, 0, 3, 2, 1, 0, 5, 3, 5, 0, 0],
 [2, 5, 3, 1, 1, 3, 3, 0, 0, 5, 4, 4, 3, 3],
 [4, 1, 4, 2, 1, 4, 5, 1, 2, 2, 0, 1, 2, 3],
 [5, 1, 1, 1, 5, 2, 5, 0, 4, 0, 2, 4, 4, 5],
 [5, 1, 0, 4, 5, 5, 4, 1, 3, 3, 1, 1, 0, 1],
 [3, 2, 2, 4, 3, 1, 5, 5, 0, 4, 3, 2, 4, 1],
 [4, 0, 1, 3, 2, 1, 2, 1, 0, 1, 5, 4, 2, 0],
 [2, 0, 4, 0, 4, 5, 1, 2, 1, 0, 3, 4, 3, 1],
 [2, 3, 4, 5, 4, 5, 0, 3, 3, 0, 2, 4, 4, 5],
 [5, 2, 4, 3, 3, 0, 5, 4, 0, 3, 4, 3, 2, 1],
 [3, 0, 4, 4, 4, 1, 4, 1, 3, 5, 1, 2, 1, 1],
 [3, 4, 2, 5, 2, 5, 1, 3, 5, 1, 4, 3, 4, 1],
 [0, 1, 1, 2, 3, 1, 2, 0, 1, 2, 4, 4, 2, 1]]

为了让你明白我想要什么,Mathematica中的MatrixPlot函数对这个数据集生成了这样的图像:

在这里输入图片描述

谢谢!

3 个回答

0

你还可以使用matplotlib库中的pyplot,下面是代码:

from matplotlib import pyplot as plt


plt.imshow(
[[3, 5, 3, 5, 2, 3, 2, 4, 3, 0, 5, 0, 3, 2],
 [5, 2, 2, 0, 0, 3, 2, 1, 0, 5, 3, 5, 0, 0],
 [2, 5, 3, 1, 1, 3, 3, 0, 0, 5, 4, 4, 3, 3],
 [4, 1, 4, 2, 1, 4, 5, 1, 2, 2, 0, 1, 2, 3],
 [5, 1, 1, 1, 5, 2, 5, 0, 4, 0, 2, 4, 4, 5],
 [5, 1, 0, 4, 5, 5, 4, 1, 3, 3, 1, 1, 0, 1],
 [3, 2, 2, 4, 3, 1, 5, 5, 0, 4, 3, 2, 4, 1],
 [4, 0, 1, 3, 2, 1, 2, 1, 0, 1, 5, 4, 2, 0],
 [2, 0, 4, 0, 4, 5, 1, 2, 1, 0, 3, 4, 3, 1],
 [2, 3, 4, 5, 4, 5, 0, 3, 3, 0, 2, 4, 4, 5],
 [5, 2, 4, 3, 3, 0, 5, 4, 0, 3, 4, 3, 2, 1],
 [3, 0, 4, 4, 4, 1, 4, 1, 3, 5, 1, 2, 1, 1],
 [3, 4, 2, 5, 2, 5, 1, 3, 5, 1, 4, 3, 4, 1],
 [0, 1, 1, 2, 3, 1, 2, 0, 1, 2, 4, 4, 2, 1]], interpolation='nearest')

plt.show()

运行后会得到这样的结果:

矩阵的图

9

也许你需要的是来自matplotlib的 matshow() 这个功能。

18

你可以试试这个:

from pylab import *
A = rand(5,5)
figure(1)
imshow(A, interpolation='nearest')
grid(True)

在这里输入图片描述

来源

撰写回答