f
の選択によっては、必ずしも可能ではありません。 f
が可逆で、行がシャッフルされる方法を追跡している場合は、効率的でない場合は可能です。 sklearn.utils shuffleメソッドは、マトリックスがシャッフルされた方法を「追跡」しません。あなた自身をロールバックしたいかもしれません。ランダムシャッフルを生成するには、range(len(A))
のランダム置換を生成し、その順番で行を繰り返しスワップします。元の行列を検索するには、置換を元に戻すだけです。これは、あなたがf
の特定の選択のためのCを回復することができます(たとえば、行列の加算)
う(EDIT、OPは、追加情報を要求した)
これは私のために動作しますが、それを行うには、より効率的な方法はおそらくあります。
import numpy as np
def shuffle(A,axis=0,permutation=None):
A = np.swapaxes(A,0,axis)
if permutation is None:
permutation = np.random.permutation(len(A))
temp = np.copy(A[permutation[0]])
for i in range(len(A)-1):
A[permutation[i]] = A[permutation[i+1]]
A[permutation[-1]] = temp
A = np.swapaxes(A,0,axis)
return A, permutation
A = np.array([[1,2],[3,4],[5,6],[7,8]])
print A
B, p = shuffle(A) #NOTE: shuffle is in place, so A is the same object as B!!!!
print "shuffle A"
print B
D, _ = shuffle(B,permutation=p[::-1])
print "unshuffle B to get A"
print D
B = np.copy(B)
C = A+B
print "A+B"
print C
A_s, p = shuffle(A)
B_s, _ = shuffle(B, permutation = p)
C_s = A_s + B_s
print "shuffle A and B, then add"
print C_s
print "unshuffle that to get the original sum"
CC, _ = shuffle(C_s, permutation=p[::-1])
print CC
'f'は単純な関数です(例:合計)。 残念ながら、私はあなたにストレスを与え続けると、自分のシャッフル機能をどうやって行えますか?私はこのようなものだと思う: 'for i in range(len(A)): A_s [i ,:] = np.random(A [i ,:]) B_s [i ,:] = np.random (B [i ,:]) どうすれば注文を追跡できますか? –