Я думаю, что ваше замешательство связано с тем, как можно объединять массивы.
Начните с простого 1d массива (в numpy
1d - это реальная вещь, а не просто «вектор строки» или «вектор столбца»):
In [288]: arr = np.arange(6)
In [289]: arr
Out[289]: array([0, 1, 2, 3, 4, 5])
np.array
объединениямассив элементов вдоль нового 1-го измерения:
In [290]: np.array([arr,arr])
Out[290]:
array([[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5]])
np.stack
со значением оси по умолчанию делает то же самое. Прочитайте его документы.
Мы можем сделать 2d массив, вектор-столбец:
In [291]: arr1 = arr[:,None]
In [292]: arr1
Out[292]:
array([[0],
[1],
[2],
[3],
[4],
[5]])
In [293]: arr1.shape
Out[293]: (6, 1)
Используя np.array
для его транспонирования (1,6) массивов:
In [294]: np.array([arr1.T, arr1.T])
Out[294]:
array([[[0, 1, 2, 3, 4, 5]],
[[0, 1, 2, 3, 4, 5]]])
In [295]: _.shape
Out[295]: (2, 1, 6)
Обратите внимание, что вас беспокоит измерение среднего размера 1.
np.vstack
объединяет массивы вдоль существующего 1-го измерения. Он не добавляет одно:
In [296]: np.vstack([arr1.T, arr1.T])
Out[296]:
array([[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5]])
Или мы можем объединить массивы горизонтально, во 2-м измерении:
In [297]: np.hstack([arr1, arr1])
Out[297]:
array([[0, 0],
[1, 1],
[2, 2],
[3, 3],
[4, 4],
[5, 5]])
То есть (6,2), которые можно транспонировать в (2,6):
In [298]: np.hstack([arr1, arr1]).T
Out[298]:
array([[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5]])