2016-05-24 2 views
1

У меня есть два массива с формами:питона поведение понимания массива умножения

z1.shape 
(74L, 1L) 

z2.shape 
(74L,) 

почему при умножении он производит массив размера 74x74:

z3 = np.multiply(z1,z2) 
z3.shape 
(74L, 74L) 

Я ожидал поэлементно умножения для достижения z3 (74L, 1L)

Как достичь z3 как элемента путем умножения элементов на z1 и z2

+1

[Релевантная документация вещания] (https://docs.scipy.org/doc/numpy-1.10.1/user/basics.broadcasting.html) и [снова с картинками] (https: // scipy. github.io/old-wiki/pages/EricsBroadcastingDoc). – wflynny

+1

Расширение по умолчанию - 'z1 * z2 [None,:]', a (74,1) * (1,74) – hpaulj

ответ

1

Вы можете сделать z1*z2[:,None]. Дополнительный индекс None растягивает 1D-массив в массив столбцов.

1

Чтобы ответить на ваш вопрос, вам нужно изменить либо массив:

>>> np.multiply(z1.reshape(-1), z2).shape 
(74,) 

>>> np.multiply(z1, z2[:,np.newaxis]).shape 
(74, 1) 

Если в формы z1, z2 не являются идентичными, умножение (или любой другой функции по этому вопросу) будет отлит как внешний продукт (z1 * z1.T), в результате получится форма (74,74) в вашем случае. В двух примерах выше,

  • z1.reshape(-1) бросает первый массив в форме второго (74,);
  • z2[:,np.newaxis] (или None вместо np.newaxis) отличает вторую форму формы (74,1).
Смежные вопросы