Я получил 3d-массив
>>> a
array([[[[9, 6, 1],
[2, 8, 6],
[3, 5, 6]],
[[9, 1, 9],
[6, 6, 7],
[3, 0, 7]],
[[9, 2, 7],
[6, 1, 4],
[9, 2, 2]],
[[3, 7, 0],
[4, 0, 6],
[7, 4, 8]]]])
Теперь я хочу изменить этот массив, чтобы определенные значения были сгруппированы, т.е.
>>> a[0,:,0,0]
array([9, 9, 9, 3])
Итак, я хочу, чтобы первый элемент каждого блока находился в одном массиве, второй элемент каждого блока в другом массиве и т. Д.
То, что я сделал до сих пор, изменило его следующим образом:
>>> b = a[0,:,:,:].T
>>> b
array([[[9, 9, 9, 3],
[2, 6, 6, 4],
[3, 3, 9, 7]],
[[6, 1, 2, 7],
[8, 6, 1, 0],
[5, 0, 2, 4]],
[[1, 9, 7, 0],
[6, 7, 4, 6],
[6, 7, 2, 8]]])
Таким образом, массивы уже созданы, но сортировка неверна. Таким образом, матрицы 2x4 строятся по строкам. Я хочу, чтобы он был построен по столбцам, то есть в этом случае следующие шесть строк должны быть следующими:
>>> b[:,0,:]
array([[9, 9, 9, 3],
[6, 1, 2, 7],
[1, 9, 7, 0]])
>>> b[:,1,:]
array([[2, 6, 6, 4],
[8, 6, 1, 0],
[6, 7, 4, 6]])
Я возился с тем, как индексировать, что мой массив построен правильно. Интуитивно понятный подход к проблеме заключается в том, что матрицы 3х3 расположены друг за другом, и я хочу вырезать массивы 1х4, идущие в направлении z (так в кучу), и поместить их в один массив по строкам.
Я имею в виду, что я мог бы перебирать их с помощью цикла for, но я бы предпочел векторизовать все это путем индексации и нарезки. Любая помощь приветствуется! Спасибо
np.concatenate([b[:,i,:] for i in range(3)])