import scipy as sp
x = sp.reshape(sp.arange(36), (6, 6))
で作成される行列 x
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29],
[30, 31, 32, 33, 34, 35]])
この行列の小行列
array([[ 6, 8, 10],
[18, 20, 22],
[30, 32, 34]])
を作成しようとして,
x[[1,3,5], [0,2,4]]
なんてことをやると
array([ 6, 20, 34])
が得られて,なんだこりゃ?となってしまう。
R なら,これで問題ないのになあと(0 オリジンと 1 オリジンの違いはあるものの)。
> x = matrix(0:35, 6, 6, byrow=TRUE)
> x
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0 1 2 3 4 5
[2,] 6 7 8 9 10 11
[3,] 12 13 14 15 16 17
[4,] 18 19 20 21 22 23
[5,] 24 25 26 27 28 29
[6,] 30 31 32 33 34 35
> x[c(2,4,6), c(1,3,5)]
[,1] [,2] [,3]
[1,] 6 8 10
[2,] 18 20 22
[3,] 30 32 34
Python では,
x[[1,3,5], :][:, [0,2,4]]
でようやっと
array([[ 6, 8, 10],
[18, 20, 22],
[30, 32, 34]])
x[[1,3,5], [0,2,4]] で得られた array([ 6, 20, 34]) は,目的とした小行列の対角成分だなあ。
R では,x[c(2,4,6), ][, c(1,3,5)] は x[c(2,4,6), c(1,3,5)] と同じなんだよ。
※コメント投稿者のブログIDはブログ作成者のみに通知されます