裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

Python の変な仕様?

2020年12月02日 | Python

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)]同じなんだよ。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 一難去ってまた一難 (Python) | トップ | Python で Fisher's exact te... »
最新の画像もっと見る

コメントを投稿

Python」カテゴリの最新記事