2017-05-03 11 views
0

私は2つのnumpy配列を持っています。私は、その行インデックスだけを同時にシャッフルしたいです。numpy配列の行インデックスのみをシャッフルする方法は?

a = np.arange(100).reshape(10,10) 
b = np.arange(10).reshape(10,1) 
p = np.random.permutation(a.shape[0]) 
a = a[p] 
b = b[p] 
print a 
print b 
+3

は 'a.shape [0] == b.shape [0]'役に立たない文ですか?ブール値の結果は失われただけですか?これはREPLセッションの結果ですか? –

+1

何ですか?なぜあなたはシャッフルをシャッフルするのを期待していますか? – BrenBarn

+1

'a.shape [0] == b.shape [0]'で暗示されている機能は(基本的に2つの配列が同じ順序になるように)結びつけるのはいいですが、numpy配列を作成し、実装するためには全く新しいクラスが必要です。 –

答えて

0

bをシャッフルしない理由私はあなたがダウンして以下のようにすることができます何をしたいのか、シャッフルときそのように2つのnumpy配列を結婚させて、それらを同じ順序にとどまらせることはできません。あなたができることは、別の配列に注文を保存し、それを使って注文を並べ替えることです。

a = np.arange(100).reshape(10,10) 
b = np.arange(10).reshape(10,1) 
i = np.random.shuffle(np.arange(a.size[0])) 
print a[i] 
print b[i] 
0

あなたを:私は、彼らの行インデックスを揃えるが、それが自動的にそれは意味をなさない

a = np.arange(100).reshape(10,10) 
b = np.arange(10).reshape(10,1) 
a.shape[0]==b.shape[0] 
np.random.shuffle(a) 
print a 
print b 
0

使用numpy.random.permutation

import numpy as np 

a = np.arange(100).reshape(10,10) 
b = np.arange(10).reshape(10,1) 
perm = np.random.permutation(a.shape[0]) 
print(a[perm, :]) 
print(b[perm, :]) 

numpy.random.shuffleインプレース配列をソートしますが、私のコードの最後の2行で作成された配列abの唯一のいわゆるviewがあります。後でabをチェックすると、それらは同じです。したがって、シャッフルされたバージョンを使用する場合は、a = a[perm, :]またはc = (a[perm, :]).copy()のようなものを使用する必要があります。

関連する問題