2016-10-27 6 views
0

私はnumpy整数配列を2つの部分にランダムに分割して、2つの部分が元の配列の合計になるように賢明な方法を見つけようとしています。split array s.t sub-arrays sum to original

例:

a = np.array([0,1,2,3]) 
b, c = rand_split(a) 
# Should give something like 
# b = [0, 1, 1, 2], c = [0, 0, 1, 1] 

EDIT:すべてのエントリは非負でなければなりません。ここで

+1

多くの組み合わせがあるかもしれません。だから、どのようにユニークなものを選ぶでしょうか? – Divakar

+0

@Divakar:はい、しかし、私はランダムに選んだそれらの1つを探しています。 – user1337

+0

まあまあ、 '[a-a // 2、a // 2]'? – Divakar

答えて

4

はリスト内包してソリューションです:

b = np.array([np.random.randint(0, n+1) for n in a]) 
c = a - b 

これはnumpyの中ですべての作業をやっているので、速くする必要があります:

b = (np.random.uniform(size=a.shape) * (a + 1)).astype(int) 
+0

bとcは両方ともnumpy配列ですか?私は理解していない "私はnumpyだけでそれを行う方法を見つけることができませんでした" –

+0

2番目のものと素敵な考え! – Divakar