#python #arrays #numpy
Вопрос:
У меня есть массив numpy со следующей структурой:
A = [[(0, 0, 0), (0, 0, 0)],
[(0, 0, 0), (0, 0, 0)],
[(0, 0, 0), (0, 0, 0)],
[(0, 0, 0), (0, 0, 0)]]
A
имеет 4 строки, 2 колла и 3 канала (в кортежах). Для краткости: A.shape = (4, 2, 3)
Теперь мне нужно поменять местами строки и столбцы, не затрагивая каналы. Результат должен выглядеть следующим образом:
B = [[(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)],
[(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)]]
B
имеет 2 строки, 4 колла и 3 канала (кортежи). Для краткости: B.shape = (2, 4, 3)
Лучшее, что я нашел за несколько часов, было таково: numpy.array(A).transpose()
он работал для 1 изображения, но у других внезапно появилось 480 каналов XD ( A
это упрощенная версия того, что у меня есть) и всего 3 строки.
Так как же мне это сделать?
Комментарии:
1. Посмотрите на метод
reshape
numpy : напримерnp.array(A).reshape(dim1, dim2, dim3)
2. Транспонирование принимает параметр порядка, например
A.transpose(1,0,2)
, переключит первые 2 измерения, оставив последние, каналы, последними.
Ответ №1:
Одним из многих возможных методов является использование swapaxes
метода:
In [15]: A = np.arange(24).reshape(2, 4, 3)
In [16]: A
Out[16]:
array([[[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]],
[[12, 13, 14],
[15, 16, 17],
[18, 19, 20],
[21, 22, 23]]])
In [17]: A.shape
Out[17]: (2, 4, 3)
In [18]: B = A.swapaxes(0, 1)
In [19]: B.shape
Out[19]: (4, 2, 3)
In [20]: B
Out[20]:
array([[[ 0, 1, 2],
[12, 13, 14]],
[[ 3, 4, 5],
[15, 16, 17]],
[[ 6, 7, 8],
[18, 19, 20]],
[[ 9, 10, 11],
[21, 22, 23]]])
Комментарии:
1. Спасибо! Метод swapaxes(0, 1) работает!
Ответ №2:
Другой метод, помимо np.swapaxes
использования np.transpose
Ознакомьтесь с документацией по транспонированию и заменам с основными примерами
A = [[(0, 0, 0), (0, 0, 0)],
[(0, 0, 0), (0, 0, 0)],
[(0, 0, 0), (0, 0, 0)],
[(0, 0, 0), (0, 0, 0)]]
A = np.array(A)
C = np.transpose(A, (1, 0, 2)) # axes1 and axes2 are switching here which changes the shape from (4,2,3) to (2,4,3)
print(C)
Выход :
[[[0 0 0]
[0 0 0]
[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]
[0 0 0]
[0 0 0]]]