1

Pythonでネストされたリストとして正方行列がある場合、それをいくつかの同じサイズのボックスに分割して、各要素がそれらのボックスの1つにある数値のリストである新しいリストを作成できます。例えば

a = [[1, 2, 3, 4],
     [5, 6, 7, 8],
     [9, 10, 11, 12],
     [13, 14, 15 ,16]]

b = [[a[0][0], a[0][1], a[1][0], a[1][1]],
     [a[0][2], a[0][3], a[1][2], a[1][3]],
     [a[2][0], a[2][1], a[3][0], a[3][1]],
     [a[2][2], a[2][3], a[3][2], a[3][3]]]

これを行う簡単な方法はありますか?これを、さまざまなサイズの行列に適用したり、ボックスのサイズを指定したりできる関数として設定する方法はありますか?

4

2 に答える 2

1

以下はあなたが持っているものと同等であり、もう少し簡潔です:

b = [a[0][:2] + a[1][:2],
     a[0][2:] + a[1][2:],
     a[2][:2] + a[3][:2],
     a[2][2:] + a[3][2:]]

または同等のリスト内包表記:

b = [a[i][s] + a[i+1][s] for i in (0,2) for s in (slice(None,2), slice(2,None))]
于 2013-02-15T18:44:32.553 に答える
1

NumPyの使用:

In [31]: import numpy as np

In [32]: a = np.arange(1,17).reshape(4,4)

In [33]: a
Out[33]: 
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12],
       [13, 14, 15, 16]])

In [34]: b = a.reshape(-1,2,2,2).swapaxes(1,2).reshape(4,4)

In [35]: b
Out[35]: 
array([[ 1,  2,  5,  6],
       [ 3,  4,  7,  8],
       [ 9, 10, 13, 14],
       [11, 12, 15, 16]])
于 2013-02-15T18:51:29.817 に答える