Давайте упростим случай и посмотрим на фактические результаты, а не только на форму.
In [327]: a=np.arange(4)
Создайте массив из этого массива (или других подобных ему)
In [328]: np.array([[[a,a],[a,a]]])
Out[328]:
array([[[[0, 1, 2, 3],
[0, 1, 2, 3]],
[[0, 1, 2, 3],
[0, 1, 2, 3]]]])
In [329]: _.shape
Out[329]: (1, 2, 2, 4)
Обратите внимание на форму и тип d (например, a
). Но когда мы добавляем к смеси скаляр 1
:
In [330]: np.array([[[a,a,1],[a,a,1]]])
Out[330]:
array([[[array([0, 1, 2, 3]), array([0, 1, 2, 3]), 1],
[array([0, 1, 2, 3]), array([0, 1, 2, 3]), 1]]], dtype=object)
In [331]: _.shape
Out[331]: (1, 2, 3)
Тип d изменился. Теперь это смесь массивов и скалярного элемента.
Замена скаляра на массив, который соответствует a
:
In [332]: ones=np.ones_like(a)
In [333]: ones
Out[333]: array([1, 1, 1, 1])
In [334]: np.array([[[a,a,ones],[a,a,ones]]])
Out[334]:
array([[[[0, 1, 2, 3],
[0, 1, 2, 3],
[1, 1, 1, 1]],
[[0, 1, 2, 3],
[0, 1, 2, 3],
[1, 1, 1, 1]]]])
In [335]: _.shape
Out[335]: (1, 2, 3, 4)
и без внешнего слоя []
In [356]: np.array([[a,a,ones],[a,a,ones]])
Out[356]:
array([[[0, 1, 2, 3],
[0, 1, 2, 3],
[1, 1, 1, 1]],
[[0, 1, 2, 3],
[0, 1, 2, 3],
[1, 1, 1, 1]]])
In [357]: _.shape
Out[357]: (2, 3, 4)
Если вы хотите размер N
(здесь 4), вы можете транспонировать
arr.transpose(2,0,1)