2017-05-03 5 views
0

次の配列があるとします。Numpy:異なるインデックスを使って行を複数回選択する配列

l = np.asarray([1,3,5,7]) 

Out[552]: array([1, 3, 5, 7]) 

私は二回インデックス配列np.asarray([[0,1],[1,2]])を使用して行を選択することができます。インデックス配列は、各行の長さが異なる持っている場合、それは動作しません

l[np.asarray([[0,1],[1,2]])] 
Out[553]: 
array([[1, 3], 
     [3, 5]]) 

l[np.asarray([[1,3],[1,2,3]])] 

Traceback (most recent call last): 

    File "<ipython-input-555-3ec2ab141cd4>", line 1, in <module> 
    l[np.asarray([[1,3],[1,2,3]])] 
IndexError: arrays used as indices must be of integer (or boolean) type 

をマイこの例の望ましい出力は次のようになります。

array([[3, 7], 
     [3, 5, 7]]) 

誰かが助けてくれますか?

+0

numpyのは、ボロボロ(非矩形配列)をサポートしていません。 – DSM

答えて

0

リストを別々に作成すると、結果が得られます。

コード:

l = np.asarray([1, 3, 5, 7]) 

# Build a sample array 
print(np.array([[3, 7], [3, 5, 7]])) 

# do the lookups into the original array 
print(np.array([list(l[[1, 3]]), list(l[[1, 2, 3]])])) 

結果:

[[3, 7] [3, 5, 7]] 
[[3, 7] [3, 5, 7]] 
+0

答えに感謝しますが、私のインデックス配列には多くの行があり、このメソッドは拡大縮小されません。 – Allen

+1

@Allen、これらの種類の詳細を質問に入れて、後で幸せな驚きとして残さないことをお勧めします。 –

1

私は、これは私が得ることができる最も近いと思います。

import numpy as np 
l = np.asarray([1, 3, 5, 7]) 
idx = [[1,3],[1,2,3]] 
output = np.array([np.array(l[i]) for i in idx]) 
print output 

結果:あなたは(リストのような)あなたの出力を格納するために使用することができ、他のデータ構造を考えるしたい場合がありますので

[array([3, 7]) array([3, 5, 7])] 
+0

ありがとうございます。これはより近いです。もしNumpyが@DSMのように不揃いの配列をサポートしていなければ、それ以上の効果は得られないでしょう。 – Allen

+0

ええ、私は 'リスト'は、そのようなインデックス作成の方が良いと思います。 –

関連する問題