В чем разница между формой (150,) и формой (150,1)? - PullRequest
1 голос
/ 27 марта 2019

В чем разница между формой (150,) и формой (150,1)?

Я думаю, что они одинаковы, я имею в виду, что они оба представляют вектор-столбец.

Ответы [ 3 ]

3 голосов
/ 27 марта 2019

Оба имеют одинаковые значения, но один является вектором, а другой - матрицей вектора. Вот пример:

import numpy as np
x = np.array([1, 2, 3, 4, 5])
y = np.array([[1], [2], [3], [4], [5]])
print(x.shape)
print(y.shape)

И вывод:

(5,)
(5, 1)
0 голосов
/ 27 марта 2019

Подобные вопросы возникают из-за двух заблуждений.

  • не понимая, что (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)!

0 голосов
/ 27 марта 2019

Хотя они оба занимают одинаковое пространство и позиции в памяти ,

Я думаю, они одинаковы, я имею в виду, что они оба представляют вектор-столбец.

Нет, они не являются и, конечно, не в соответствии с NumPy (ndarrays).

Основное отличие состоит в том, что

shape (150,) => является одномерным массивом, тогда как
shape (150,1) => является двумерным массивом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...