2012-05-03 9 views
1

2番目と3番目の列、2番目と最後の列の間の列に加えて最初の列をスライスしようとしていますが、試したスライスがすべて動作していないようです。たとえば、次の最初のprint文では、括弧内の:のために構文エラーが返されます。私は配列を連結することも試みましたが、これがこの問題を達成する最も効率的な方法ではないと思います。Numpy Advanced Slicing

import numpy as np 
y = np.arange(35).reshape(5, 7) 

# My ultimate goal is to do a slice similar to this expression, but this of course gives 
# an error. 
print y[[1, 2], [0, 2:-1]] 

# This works, but I feel it is inefficient, although I could be wrong. 
print np.hstack((y[[1, 2], 0][:, np.newaxis], y[[1, 2], 2:-1])) 

ご意見をいただければ幸いです。

答えて

2

私はこれがあなたが求めているものであれば知っているが、

In [11]: y[2:4,[1,3,4,5,6]] 
Out[11]: 
array([[15, 17, 18, 19, 20], 
     [22, 24, 25, 26, 27]]) 

In [12]: 

numpyのは、標準のPythonのリストに似てスライスすることができますが、寸法は、いくつかのtrickinessを追加しますが、私はまだこのソリューションはあることを見つけることを試みてはいけませんネストやルーピングのリシェイプと比較して本当にエレガントですが、これが必ずしもすべての解決策になるとは限りません。

編集:

それは良い見ていないが、それはリシェイプや巨大な行列よりはましだが、これは、アレイを再構築または過剰の要素を反復処理することなく、y[1:3, [0, 2:-1]]を言うと同じであるあなたを

を変更そのディメンションの残りの列を[0] +のリストにすることによって、重要なインデックスを指定します。

In [33]: y[1:3, [0] + list(xrange(2,y.shape[1]))] 
Out[33]: 
array([[ 7, 9, 10, 11, 12, 13], 
     [14, 16, 17, 18, 19, 20]]) 
+0

申し訳ありませんが、私は十分に具体的ではありませんでした。私が列2:-1を必要とする理由は、時には列の中央に列がありますが、列の始めまたは終わりには列がありません。 – hotshotiguana

+0

'y [2:4,1:-1]'を実行すると、行2,3とすべての '内側'の列があります。 – lukecampbell

+0

元の質問を編集しました。「内側」の列に加えて最初の列も必要です。 – hotshotiguana

関連する問題