如何在特定轴上随机打乱numpy 3D阵列中的块



我有一个3D numpy数组,我想在一个特定的轴上逐块洗牌,同时保持该块中的数据处于原始状态。例如,我有一个形状为(5014023(的np数组,我想通过在轴=1上制作(5010423(的块来进行混洗。因此,将创建140个块,并且应该在轴=1上对块进行混洗,同时保持块中的数据的原始顺序。我阅读了关于np.random.shuffle(x)的文档,但它只在第一个轴上移动,我们无法提供它的块大小。numpy中有什么函数或快速方法吗?

您可以使用随机排列:

A = sum(np.ogrid[0:0:50j,:140,0:0:23j])
rng = np.random.default_rng()
Ashuff = A[:,rng.permutation(140),:]

也许交换轴、混洗和交换回会对你有用吗?

a = np.random.random((50,140,23))
b = np.swapaxes(a, 0, 1)
np.random.shuffle(b)
c = np.swapaxes(b, 0, 1)

最新更新