#python #numpy #matplotlib
#python #numpy #matplotlib
Вопрос:
Допустим, у меня есть 4D np.array, который состоит из 4 групп матриц 4×4:
array([[[[1., 1.],
[1., 1.]],
[[2., 2.],
[2., 2.]],
[[3., 3.],
[3., 3.]],
[[4., 4.],
[4., 4.]]],
[[[5., 5.],
[5., 5.]],
[[6., 6.],
[6., 6.]],
[[7., 7.],
[7., 7.]],
[[8., 8.],
[8., 8.]]],
[[[9., 9.],
[9., 9.]],
[[10., 10.],
[10., 10.]],
[[11., 11.],
[11., 11.]],
[[12., 12.],
[12., 12.]]],
[[[13., 13.],
[13., 13.]],
[[14., 14.],
[14., 14.]],
[[15., 15.],
[15., 15.]],
[[16., 16.],
[16., 16.]]]])
Теперь я хочу преобразовать его в единую матрицу, чтобы я мог иметь группы в строках (но только значения, а не в виде матрицы). Я хочу построить матрицы 4×4 рядом друг с другом на одном графике с imshow
помощью функции matplotlib, поэтому она должна выглядеть так:
[[ 1., 1., 2., 2., 3., 3., 4., 4.],
[ 1., 1., 2., 2., 3., 3., 4., 4.],
[ 5., 5., 6., 6., 7., 7., 8., 8.],
[ 5., 5., 6., 6., 7., 7., 8., 8.],
[ 9., 9., 10., 10., 11., 11., 12., 12.],
[ 9., 9., 10., 10., 11., 11., 12., 12.],
[13., 13., 14., 14., 15., 15., 16., 16.],
[13., 13., 14., 14., 15., 15., 16., 16.]]
Возможно ли это вообще? Я хотел бы использовать только функции numpy и избегать циклов for по соображениям производительности, но если это невозможно, другое решение также было бы отличным.
Ответ №1:
Вот что я бы сделал:
# other sample:
arr=np.arange(64).reshape(4,4,2,2)
arr.swapaxes(2,1).reshape(arr.shape[0] * arr.shape[2],-1)
Выходной сигнал:
array([[ 0, 1, 4, 5, 8, 9, 12, 13],
[ 2, 3, 6, 7, 10, 11, 14, 15],
[16, 17, 20, 21, 24, 25, 28, 29],
[18, 19, 22, 23, 26, 27, 30, 31],
[32, 33, 36, 37, 40, 41, 44, 45],
[34, 35, 38, 39, 42, 43, 46, 47],
[48, 49, 52, 53, 56, 57, 60, 61],
[50, 51, 54, 55, 58, 59, 62, 63]])