2
配列が(50,5)であるとします。データポイントの行/シーケンスのグループ化、つまりすべての行をシャッフルする代わりに、5行のシャンクをシャッフルする代わりに、シャッフルする方法はありますか?2D配列の行のシャッフルグループ - NumPy
おかげ
配列が(50,5)であるとします。データポイントの行/シーケンスのグループ化、つまりすべての行をシャッフルする代わりに、5行のシャンクをシャッフルする代わりに、シャッフルする方法はありますか?2D配列の行のシャッフルグループ - NumPy
おかげ
アプローチ#1:ここで、グループサイズに基づいて3D
配列に整形アプローチだnp.random.permutation
から得られたシャッフルインデックスを有するブロックのインデックスにインデックスし、最終的にバック2D
に整形 -
N = 5 # Blocks of N rows
M,n = a.shape[0]//N, a.shape[1]
out = a.reshape(M,-1,n)[np.random.permutation(M)].reshape(-1,n)
-
In [141]: a
Out[141]:
array([[89, 26, 12],
[97, 60, 96],
[94, 38, 54],
[41, 63, 29],
[88, 62, 48],
[95, 66, 32],
[28, 58, 80],
[26, 35, 89],
[72, 91, 38],
[26, 70, 93]])
In [142]: N = 2 # Blocks of N rows
In [143]: M,n = a.shape[0]//N, a.shape[1]
In [144]: a.reshape(M,-1,n)[np.random.permutation(M)].reshape(-1,n)
Out[144]:
array([[94, 38, 54],
[41, 63, 29],
[28, 58, 80],
[26, 35, 89],
[89, 26, 12],
[97, 60, 96],
[72, 91, 38],
[26, 70, 93],
[88, 62, 48],
[95, 66, 32]])
アプローチ#2:一つは、単にその場の変化のためにnp.random.shuffle
を使用することができます -
np.random.shuffle(a.reshape(M,-1,n))
サンプル実行 -
In [156]: a
Out[156]:
array([[15, 12, 14],
[55, 39, 35],
[73, 78, 36],
[54, 52, 32],
[83, 34, 91],
[42, 11, 98],
[27, 65, 47],
[78, 75, 82],
[33, 52, 93],
[87, 51, 80]])
In [157]: N = 2 # Blocks of N rows
In [158]: M,n = a.shape[0]//N, a.shape[1]
In [159]: np.random.shuffle(a.reshape(M,-1,n))
In [160]: a
Out[160]:
array([[15, 12, 14],
[55, 39, 35],
[27, 65, 47],
[78, 75, 82],
[73, 78, 36],
[54, 52, 32],
[33, 52, 93],
[87, 51, 80],
[83, 34, 91],
[42, 11, 98]])