2009-07-09 9 views
1

私は数年前にPythonで書いたコードについて考えていましたが、ある点ではインデックスのリストのリストを取得する必要がありました。行列のいくつかの行を取得するPythonの方法

私はこのようなものでした覚えて

def getRows(m, row_indices): 
    tmp = [] 
    for i in row_indices: 
     tmp.append(m[i]) 
    return tmp 

今、私はそれ以来、もう少し学んだことを、私はこのようなリストの内包表記を使用したい:

[m[i] for i in row_indices] 

をしかし、私はまだそれを行うためにもっとpythonic方法があるかどうか疑問に思っています。何か案は?

他の配列ライブラリnumpyとの代替案も知りたいと思います。

答えて

4

スライシングの構文については、NumPyをご覧ください。リンクされたページを「インデクシング、スライスおよび反復」するまでスクロールダウンします。

+0

有望に見えたが、私は検索していたようなものは何もありませんでした:( – fortran

+0

あなたの必要性に合わないnumpyがありますか?M:[]: – Autoplectic

+0

ええ、今私は試していますが、私はその機能が足りないと思ったので、docsで見つけてください。 – fortran

4

これはきれいな方法です。だから、それ以上のPythonicを得られないと言っています。

+0

を与える: -/ – fortran

2

Curtが言ったように、Numpyはこれのための良いツールだと思われます。ここでは一例だ、

from numpy import * 

a = arange(16).reshape((4,4)) 
b = a[:, [1,2]] 
c = a[[1,2], :] 

print a 
print b 
print c 

は、私は多分アクセサカッコまたはそのような何かの間のインデックスのシーケンスを渡すためのよりよい方法があったことを考えていた

[[ 0 1 2 3] 
[ 4 5 6 7] 
[ 8 9 10 11] 
[12 13 14 15]] 
[[ 1 2] 
[ 5 6] 
[ 9 10] 
[13 14]] 
[[ 4 5 6 7] 
[ 8 9 10 11]] 
関連する問題