2017-12-04 13 views
0

私は簡潔な抽出方法を探しています高次元配列からの部分配列。配列[beg [0]:end [0]、beg [1]:end [1]、...]

たとえば、配列aを考えてみましょう。私はサブアレイを抽出したいのですが、最初の座標と最後の座標は2つの配列beに格納されています。

現在、所望のサブアレイを抽出するために、私は、このようなアレイをスライスの組み込み、簡潔な方法がある場合、私は思っていた

a[b[0]:e[0],b[1]:e[1],b[2]:e[2],b[3]:e[3],...] 

を入力します。私はa[b:e]のようなものを呼び出すのが大好きですが、これはうまくいきません。

+0

内蔵はありませんが、[こちら](https://stackoverflow.com/a/47605511/7207392)をご覧ください。 –

答えて

1

zip二つの配列とzipから結果のタプルからスライスオブジェクトのタプルを構築:

from itertools import starmap 

a[tuple(starmap(slice, zip(b, e)))] 
+0

インデックスが '(d、2)' 'np.array'に格納されていれば、' zip'を取り除き、やや簡潔な 'a [tuple(startmap(slice、ind ))] '' – user1735003

0

hereを示すサブクラス化np.s_アプローチは、使用することができ、あなたの好みのためにあまりにも重い場合:

a[tuple(slice(*idx) for idx in np.broadcast(start, stop, step))] 

ここでnp.broadcastを使用することの美しさは、start = None、stop = [1,2,3]のようにスカラーとリストを混在させることができることです。これはa[:1, :2, :3]に相当します。

関連する問題