Для массива фигур (2,2):
In [13]: arr = np.array([[1,2],[3,4]])
In [14]: arr
Out[14]:
array([[1, 2],
[3, 4]])
Python unpacking
просто выполняет итерацию в массиве, то есть в первом измерении, «строки»:
In [15]: x, y = arr
In [16]: x,y
Out[16]: (array([1, 2]), array([3, 4]))
Чтобы распаковать столбцы, мы могли бы транспонировать массив, поэтому второе измерение - первое.Но я думаю, что понимание списка яснее:
In [17]: x, y = [arr[:,i] for i in range(2)]
In [18]: x,y
Out[18]: (array([1, 3]), array([2, 4]))
Для трехмерного массива:
In [19]: arr = np.arange(1,13).reshape(2,2,3)
In [20]: arr
Out[20]:
array([[[ 1, 2, 3],
[ 4, 5, 6]],
[[ 7, 8, 9],
[10, 11, 12]]])
Результаты итерации по первому измерению должны быть очевидны - 2 блока или панели.
Вы правильно поняли 2-е измерение.Для третьего, результаты - 3 (2,2) массива:
In [21]: x,y,z=[arr[:,:,i] for i in range(arr.shape[2])]
In [22]: x
Out[22]:
array([[ 1, 4],
[ 7, 10]])
In [23]: y
Out[23]:
array([[ 2, 5],
[ 8, 11]])
In [24]: z
Out[24]:
array([[ 3, 6],
[ 9, 12]])
x,y,z=
из этого транспонирования также будет работать:
In [25]: arr.transpose(2,0,1)
Out[25]:
array([[[ 1, 4],
[ 7, 10]],
[[ 2, 5],
[ 8, 11]],
[[ 3, 6],
[ 9, 12]]])
np.take
можно использовать какмоя индексация:
[np.take(arr,i,2) for i in range(3)]