【问题标题】:How can I create an image in python by using a matrix?如何使用矩阵在 python 中创建图像?
【发布时间】:2020-10-11 11:27:58
【问题描述】:
m = [98.75, 97, 96.66, 42, 9, 4, 1,98.33, 95, 93.33, 44, 7, 4, 1,95,94,87.5, 38.33, 5, 0, 
0,95, 93, 85, 35.55,5,0,0,95,92,83,30,3.33,0,0,95,91,80,28,1.66,0,0,95,90,75,21.25,1.66,0,0]

从上面的列表中,我需要创建一个 7x7 矩阵,如下:

      [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]
 [1,] 98.75 98.33 95.00 95.00 95.00 95.00 95.00
 [2,] 97.00 95.00 94.00 93.00 92.00 91.00 90.00
 [3,] 96.66 93.33 87.50 85.00 83.00 80.00 75.00
 [4,] 42.00 44.00 38.33 35.55 30.00 28.00 21.25
 [5,]  9.00  7.00  5.00  5.00  3.33  1.66  1.66
 [6,]  4.00  4.00  0.00  0.00  0.00  0.00  0.00
 [7,]  1.00  1.00  0.00  0.00  0.00  0.00  0.00

需要从矩阵中生成如下图像:

【问题讨论】:

  • 你试过什么?困难在哪里?您肯定不会指望陌生人为您完成所有工作,对吧?

标签: python list numpy matplotlib image-processing


【解决方案1】:

首先,使用numpy 将列表转换为数组,然后使用reshape,然后使用您喜欢的包进行绘图,例如。 seabornmatplotlib:

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

m = [98.75, 97, 96.66, 42, 9, 4, 1,98.33, 95, 93.33, 44, 7, 4, 1,95,94,87.5, 38.33, 5, 0, 
0,95, 93, 85, 35.55,5,0,0,95,92,83,30,3.33,0,0,95,91,80,28,1.66,0,0,95,90,75,21.25,1.66,0,0]


data = np.asarray(m).reshape(7,7)[::-1]
sns.heatmap(data, cmap = 'jet')
# plt.imshow(data)
plt.xlabel('Gain USRP2 (receiver side) (db)')
plt.ylabel('Gain USRP1 (sender side) (db)')

【讨论】:

  • 像这样重新整形会产生一个与 OP 显示的不同的数组
  • @Angry Bird,正确答案是什么?您绘制的那个还是您的结果中的那个?如果是后者,只需transpose 矩阵
  • 感谢您的支持,不胜感激!
  • 如果它回答了您的问题,则接受它作为答案,如果没有,请澄清缺少的内容或您的意思
【解决方案2】:

我喜欢用plt.matshow():

import numpy as np
import matplotlib.pyplot as plt

m = [98.75, 97, 96.66, 42, 9, 4, 1,98.33, 95, 93.33, 
     44, 7, 4, 1,95,94,87.5, 38.33, 5, 0, 0,95, 93, 
     85, 35.55,5,0,0,95,92,83,30,3.33,0,0,95,91,80,28,
     1.66,0,0,95,90,75,21.25,1.66,0,0]

plt.matshow(np.array(m).reshape(7, 7).T)
plt.show()

【讨论】:

    猜你喜欢
    • 2018-04-24
    • 1970-01-01
    • 2021-03-26
    • 2011-02-11
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    相关资源
    最近更新 更多