Как случайным образом перетасовать блоки в массиве numpy 3D на определенной оси - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть массив 3D numpy, и я хочу переместить его по блокам по определенной оси, сохраняя данные в этом блоке в исходном состоянии. Например, у меня есть массив формы np (50, 140, 23), и я хочу перемешать, создав блоки (50, 1, 23) по оси = 1. Таким образом, будет создано 140 блоков, и они должны быть перетасованы по оси = 1, сохраняя данные в блоках в первоначальном порядке. Я прочитал документацию о np.random.shuffle(x), но это только тасование по первой оси, и мы не можем предоставить ему размер блока. Есть ли какая-либо функция в numpy или быстрый способ сделать это?

Ответы [ 2 ]

2 голосов
/ 14 апреля 2020

Вы можете использовать случайную перестановку:

A = sum(np.ogrid[0:0:50j,:140,0:0:23j])
rng = np.random.default_rng()
Ashuff = A[:,rng.permutation(140),:]
1 голос
/ 14 апреля 2020

Возможно, замена оси, перетасовка и замена назад могут помочь вам?

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