2013-11-06 4 views
0

Я новичок в использовании питона и столкнулся с проблемой, я надеюсь, что вы можете помочь мне с:Сумма строк и столбцов в качестве оси х и у

Ниже вы можете увидеть пример кода, я сделал для построения матрица, в которой ось y представлена ​​слева и ось 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

Вы можете подвести грести #i, используя следующую команду:

sum(conf_arr[i]) 

Помните, что при подсчете питона начинается с 0 (а не 1, как Matlab).

Чтобы инвертировать матрицу, вы можете использовать

zip(*conf_arr) 

И тогда вы можете подвести грести #i (что было бы на самом деле колонке #i).

+0

Теперь я понимаю, как получить сумму каждой строки, но как мне построить эти значения в сюжете матрицы замешательства? – user2814174

Смежные вопросы