Выяснить форму вещания в NumPy - PullRequest
0 голосов
/ 26 ноября 2018

Я понимаю основы вещания numpy (Панды), но застрял на этом простом примере:

x = np.arange(5) 
y = np.random.uniform(size = (2,5)) 
z = x*y 
print(z.shape) #(2,5) 

Мое понимание формы z состоит в том, что у вас есть массив (1,5), умноженный наМассив (2,5), конечный размер для 5 равен, поэтому вы получите массив 2x5.Хорошо, это звучит хорошо.Моя проблема в том, почему x.shape = (5,)?Разве это не одномерное, значит, действительно 1x5?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Правила вещания:

Add leading singleton dimensions as needed to match number of dimensions
Scale any singleton dimensions to match dimension values
Raise error dimensions can't be matched

С вашими x и y:

(5,) * (2,5)
(1,5) * (2,5)          # add the leading 1
(2,5) * (2,5)          # scale the 1
=> (2,5)

Если y было (5,2), это повысило быошибка, потому что (1,5) не может быть в паре с (5,2).Но (5,1) в порядке, потому что (1,5) * (5,1) => (5,5).

0 голосов
/ 26 ноября 2018

NumPy 1D массив как x дает вам форму, такую ​​как (5,) без изменения формы.Если вы хотите обработать его как матрицу из 1 столбца формы 1x5, тогда выполните np.arange(5).reshape(1,5)

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