1

以下の配列をスライスして、2 番目と最後の列の間の列に加えて、行 2 と 3、および最初の列を取得しようとしていますが、試したすべてのスライスが機能していないようです。たとえば、次の最初の print ステートメントでは、括弧内の : が原因で構文エラーが発生します。また、配列を単純に連結しようとしましたが、これがこの問題を達成するための最も効率的な方法だとは思いません。

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]))

どんな提案でも大歓迎です。

4

1 に答える 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 リストと同じようにスライスできますが、ディメンションによって若干のトリッキーさが追加されますが、このソリューションはネストやループの再形成と比較して非常にエレガントであることがわかりますが、これが常にすべてのソリューションであるとは限りません。

編集:

見栄えはよくありませんが、形状変更やマトリックスの大幅な変更よりはましです

これは、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]])
于 2012-05-03T17:38:06.320 に答える