У меня есть матрица, которую я хочу перемешать по строкам в соответствии со следующей схемой, описанной ниже:
У нас есть наша матрица a
:
import numpy as np
np.random.seed(0)
low = -5
high = 5
num_frames = 2
other_value = 3
dim1 = num_frames * other_value
dim2 = 5
a_shape = (dim1, dim2)
a = np.random.random_integers(low, high, size=a_shape)
print(a)
[[ 0 -5 -2 -2 2]
[ 4 -2 0 -3 -1]
[ 2 1 3 3 5]
[-4 1 2 2 3]
[-4 0 4 3 4]
[-1 -2 -5 -2 0]]
И мы хотимразбить наши строки на num_frames
групп.Таким образом, для нашей матрицы a
с двумя кадрами наше разбиение будет выглядеть следующим образом:
[[ 0 -5 -2 -2 2]
[ 4 -2 0 -3 -1]
[ 2 1 3 3 5]
[-4 1 2 2 3]
[-4 0 4 3 4]
[-1 -2 -5 -2 0]]
Затем мы хотим чередовать строки каждого кадра, чтобы перестановка была задана как [0, 3, 1, 4, 2, 5]
,где эти числа являются индексами строк.
Для a
это даст нам матрицу, которая выглядит следующим образом:
[[ 0 -5 -2 -2 2]
[-4 1 2 2 3]
[ 4 -2 0 -3 -1]
[-4 0 4 3 4]
[ 2 1 3 3 5]
[-1 -2 -5 -2 0]]
Если бы у нас было 3 кадра, но такое же количество строк(то есть other_value=2
), наша перестановка будет [0, 2, 4, 1, 3, 5]
, что дает матрицу:
[[ 0 -5 -2 -2 2]
[ 2 1 3 3 5]
[-4 0 4 3 4]
[ 4 -2 0 -3 -1]
[-4 1 2 2 3]
[-1 -2 -5 -2 0]]
Я не могу понять, что такое:
Какими способами это можно сделать?генерировать правильную перестановку для матриц произвольного размера и количество кадров?Предполагается, что у нас всегда будет одинаковое количество строк в каждом кадре (или, dim1 % num_frames = 0
).
Способ перестановки строк был бы приведенным ниже кодом, но я не уверен, какполучить перестановку.
b = a.copy()
perm = [0, 3, 1, 4, 2, 5]
b[[0, 1, 2, 3, 4, 5]] = a[perm]
print(b)