我是初学者使用python并遇到问题我希望你可以帮助我:
下面你可以看到我为绘制矩阵所做的示例代码,其中y轴显示在左侧,x轴显示在顶部。我想要的是在每列的底部的x轴上,该列的总和以及右边的y轴,每行的总和。 这意味着对于第一行我想要数字39作为y标签,而对于第一列我想要39作为x标签。
我希望有人可以帮我解决这个问题
import numpy as np
import matplotlib.pyplot as plt
conf_arr = [[33,2,0,0,0,0,0,0,0,1,3],
[3,31,0,0,0,0,0,0,0,0,0],
[0,4,41,0,0,0,0,0,0,0,1],
[0,1,0,30,0,6,0,0,0,0,1],
[0,0,0,0,38,10,0,0,0,0,0],
[0,0,0,3,1,39,0,0,0,0,4],
[0,2,2,0,4,1,31,0,0,0,2],
[0,1,0,0,0,0,0,36,0,2,0],
[0,0,0,0,0,0,1,5,37,5,1],
[3,0,0,0,0,0,0,0,0,39,0],
[0,0,0,0,0,0,0,0,0,0,38]]
norm_conf = []
for i in conf_arr:
a = 0
tmp_arr = []
a = sum(i, 0)
for j in i:
tmp_arr.append(float(j)/float(a))
norm_conf.append(tmp_arr)
fig = plt.figure()
plt.clf()
ax = fig.add_subplot(111)
ax.set_aspect(1)
res = ax.imshow(np.array(norm_conf), cmap=plt.cm.OrRd,
interpolation='nearest')
width = len(conf_arr)
height = len(conf_arr[0])
for x in xrange(width):
for y in xrange(height):
ax.annotate(str(conf_arr[x][y]), xy=(y, x),
horizontalalignment='center',
verticalalignment='center')
ax.xaxis.tick_top()
cb = fig.colorbar(res)
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
plt.ylabel('True Landform (value explanation in info)')
plt.xticks(range(width), alphabet[:width])
plt.yticks(range(height), alphabet[:height])
plt.savefig('confusion_matrix.png', format='png')
plt.show()
答案 0 :(得分:0)
您可以使用以下命令对行#i求和:
sum(conf_arr[i])
请记住,在python计数从0开始(而不是像Matlab一样)。
要反转矩阵,您可以使用
zip(*conf_arr)
然后你可以加一行#i(实际上是#i列)。