2016年1月17日日曜日

pythonで転置行列にする(Numpyなし)

文字列を行列に含んでいるとNumpyでは面倒なので調べた。
data =
[['O', 'A', 'B', 'C', 'D', 'E', 'F'], 
 ['P', 'A11', 'A12', 'A13', 'A14', 'A15', 'A16'], 
 ['Q', 'A21', 'A22', 'A23', 'A24', 'A25', 'A26'], 
 ['R', 'A31', 'A32', 'A33', 'A34', 'A35', 'A36']]
のとき、

data2 = list(map(list, zip(*data)))
とするとできた。
data2 = 
[['O', 'P', 'Q', 'R'], 
 ['A', 'A11', 'A21', 'A31'], 
 ['B', 'A12', 'A22', 'A32'], 
 ['C', 'A13', 'A23', 'A33'], 
 ['D', 'A14', 'A24', 'A34'], 
 ['E', 'A15', 'A25', 'A35'], 
 ['F', 'A16', 'A26', 'A36']]

参照: http://asiagohan.hatenablog.com/entry/2015/05/08/170715
こちらのやり方もできた。
http://lightson.dip.jp/blog/seko/2830
def invert_lst(lst):
       col = len(lst[0])
       row = len(lst)
       inv = []
       for i in range(col):
               l = []
               for j in range(row):
                       l.append('')
               inv.append(l)                   
       for i in range(row):
               for j in range(col):
                       inv[j][i] = lst[i][j]
       return inv
       
lst = [[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]
print invert_lst(lst)

>>>[[1, 1, 1, 1, 1], [2, 2, 2, 2, 2], [3, 3, 3, 3, 3]]

0 件のコメント:

コメントを投稿