2011-10-05 27 views
10

例えば、私があるndarrayありますnumpyの条件に従って配列を分割する方法は?

[array([1,3,2,4]), array([5,7,6,8])] 

a = np.array([1, 3, 5, 7, 2, 4, 6, 8]) 

今、私は1つは、すべての数字< 5であり、他は> = 5のすべてで、二つの部分にaを分割したいが

確かに私はaをトラバースし、2つの新しい配列を作成することができます。しかし、私はnumpyがいくつかのより良い方法を提供していることを知りたいですか?

同様に、多次元アレイの場合、

私がある結果、最初の列< 3および> = 3に応じて、それを分割したい
array([[1, 2, 3], 
     [4, 5, 6], 
     [7, 8, 9], 
     [2, 4, 7]]) 

[array([[1, 2, 3], 
     [2, 4, 7]]), 
array([[4, 5, 6], 
     [7, 8, 9]])] 

ではなく、それを通過する任意のより良い方法はありますか?ありがとう。

答えて

20
import numpy as np 

def split(arr, cond): 
    return [arr[cond], arr[~cond]] 

a = np.array([1,3,5,7,2,4,6,8]) 
print split(a, a<5) 

a = np.array([[1,2,3],[4,5,6],[7,8,9],[2,4,7]]) 
print split(a, a[:,0]<3) 

これは、次のような出力生成:

[array([1, 3, 2, 4]), array([5, 7, 6, 8])] 

[array([[1, 2, 3], 
     [2, 4, 7]]), array([[4, 5, 6], 
     [7, 8, 9]])] 
+0

ネヴァーマインドを、私はgoofed。これはメソッドであり、グローバル名ではありません。キャリーオン.. – Daenyth

+0

素晴らしいスライス!私は前にこの方法を知らない。注意深くnumpyのdocを読む時間...ありがとう! – Clippit

+0

'arr [cond]、arr [〜cond]'は同じ条件の配列のすべての要素を2回テストするという意味ではありませんか?そのエレガントなソリューションのために – endolith

関連する問題