Подобные вопросы возникают из-за двух заблуждений.
- не понимая, что
(5,)
является кортежем из 1 элемента.
- ожидание MATLAB-подобных матриц
Создайте массив с помощью удобной функции arange
:
In [424]: x = np.arange(5)
In [425]: x.shape
Out[425]: (5,) # 1 element tuple
In [426]: x.ndim
Out[426]: 1
numpy
автоматически не создает матрицы, 2-мерные массивы. В этом отношении он не следует за MATLAB.
Мы можем изменить этот массив, добавив второе измерение. В результате получается view
(рано или поздно вам нужно узнать, что это значит):
In [427]: y = x.reshape(5,1)
In [428]: y.shape
Out[428]: (5, 1)
In [429]: y.ndim
Out[429]: 2
Отображение этих двух массивов сильно отличается. Те же цифры, но расположение и количество скобок сильно отличаются, отражая соответствующие формы:
In [430]: x
Out[430]: array([0, 1, 2, 3, 4])
In [431]: y
Out[431]:
array([[0],
[1],
[2],
[3],
[4]])
Разница в форме может показаться академической - пока вы не попытаетесь сделать математику с массивами:
In [432]: x+x
Out[432]: array([0, 2, 4, 6, 8]) # element wise sum
In [433]: x+y
Out[433]:
array([[0, 1, 2, 3, 4],
[1, 2, 3, 4, 5],
[2, 3, 4, 5, 6],
[3, 4, 5, 6, 7],
[4, 5, 6, 7, 8]])
Как это привело к созданию массива (5,5)? Трансляция массива (5,) с массивом (5,1)!