沿轴独立洗牌 3d numpy 数组

问题描述 投票:0回答:1

如何更好地编写这段代码?

我有一个二维数组沿 0 轴重复 k 次。我想沿着第二个轴独立地对其进行洗牌。下面提供的代码可以工作,但我相信它可以做得更好。请帮忙。

c = rng.random(size=(n, m))[np.newaxis].repeat(k, axis=0)

for i in range(c.shape[0]):
        c[i] = c[i, rng.choice(c.shape[1], c.shape[1], replace=False)]

我尝试了在 2d 数组上进行切片和排列切片的多种设置,但我无法在 3d 数组上对其进行成像。

python arrays numpy 3d shuffle
1个回答
0
投票

小例子:

import numpy as np
rng = np.random.default_rng()

n = 4
m = 3
k = 2

c = rng.random(size=(k, n, m))[np.newaxis][0]

c
是:

array([[[0.41020744, 0.10595292, 0.77565636],
        [0.81389261, 0.66003734, 0.01037299],
        [0.93920543, 0.384785  , 0.05543084],
        [0.30460909, 0.40248868, 0.39469976]],

       [[0.97808845, 0.19421067, 0.56014205],
        [0.31257343, 0.95297191, 0.14725328],
        [0.47446104, 0.66471068, 0.00975436],
        [0.04586853, 0.46771096, 0.5393846 ]]])

请注意,它的

shape
保留了之前的内容。

© www.soinside.com 2019 - 2024. All rights reserved.