リストの操作

create a matrix from a list in python – StackOverflow

まず,素直にやれば.

import numpy as np


A=[["a_00",0,0],["a_01",0,1],["a_02",0,2],["a_03",0,3], ["a_10",1,0],["a_11",1,1],["a_12",1,2],["a_13",1,3], ["a_20",2,0],["a_21",2,1],["a_22",2,2],["a_23",2,3], ["a_30",3,0],["a_31",3,1],["a_32",3,2],["a_33",3,3]]

np_A = np.array(A)
np_A[:, 0].reshape(4, 4)

array([[‘a_00’, ‘a_01’, ‘a_02’, ‘a_03’],
[‘a_10’, ‘a_11’, ‘a_12’, ‘a_13’],
[‘a_20’, ‘a_21’, ‘a_22’, ‘a_23’],
[‘a_30’, ‘a_31’, ‘a_32’, ‘a_33’]],
dtype='<U4')

もう少し一般化すれば(2,3列目が行列を表しているならば),

import numpy as np


A=[["a_00",0,0],["a_01",0,1],["a_02",0,2],["a_03",0,3], ["a_10",1,0],["a_11",1,1],["a_12",1,2],["a_13",1,3], ["a_20",2,0],["a_21",2,1],["a_22",2,2],["a_23",2,3], ["a_30",3,0],["a_31",3,1],["a_32",3,2],["a_33",3,3]]

A = sorted(A, key=lambda x: (x[1], x[2]))
e, r, c = zip(*A)
res = np.array(e)
res.reshape(np.unique(r).size, -1)

array([['a_00', 'a_01', 'a_02', 'a_03'],
['a_10', 'a_11', 'a_12', 'a_13'],
['a_20', 'a_21', 'a_22', 'a_23'],
['a_30', 'a_31', 'a_32', 'a_33']],
dtype='<U4')
 
 
 
その他:

from itertools import groupby

groups = []
uniquekeys = []
A = sorted(A, key=lambda x: (x[1], x[2]))
for k, e in groupby(A, lambda x: x[1]):
    groups.append(list(e))
    uniquekeys.append(k)
groups

[[['a_00', 0, 0], ['a_01', 0, 1], ['a_02', 0, 2], ['a_03', 0, 3]],
[['a_10', 1, 0], ['a_11', 1, 1], ['a_12', 1, 2], ['a_13', 1, 3]],
[['a_20', 2, 0], ['a_21', 2, 1], ['a_22', 2, 2], ['a_23', 2, 3]],
[['a_30', 3, 0], ['a_31', 3, 1], ['a_32', 3, 2], ['a_33', 3, 3]]]

for subli in groups:
    print(list(zip(*subli))[0])

('a_00', 'a_01', 'a_02', 'a_03')
('a_10', 'a_11', 'a_12', 'a_13')
('a_20', 'a_21', 'a_22', 'a_23')
('a_30', 'a_31', 'a_32', 'a_33')

e, r, c = list(zip(*A))
d = {i: {j: e[4*i+j] for j in c} for i in r}
d

{0: {0: 'a_00', 1: 'a_01', 2: 'a_02', 3: 'a_03'},
1: {0: 'a_10', 1: 'a_11', 2: 'a_12', 3: 'a_13'},
2: {0: 'a_20', 1: 'a_21', 2: 'a_22', 3: 'a_23'},
3: {0: 'a_30', 1: 'a_31', 2: 'a_32', 3: 'a_33'}}

d[2][1]

'a_21'

広告
カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中