Numpy: Как поэлементно умножить два вектора shape (n, 1) и (n,)? - PullRequest
7 голосов
/ 30 марта 2012

Поэлементное умножение двух векторов не проблема, если они оба имеют одинаковую форму, скажем, оба (n, 1) или оба (n,). Если один вектор имеет форму (n, 1), а другой (n,), то оператор * возвращает что-то смешное.

a = np.ones((3,1))
b = np.ones((3,))
print a * b

Полученная nxn-матрица содержит A_ {i, j} = a_i * b_j.

Как я могу сделать поэлементное умножение для a и b тогда?

Ответы [ 2 ]

17 голосов
/ 30 марта 2012

Нарезать векторы так, чтобы их форма соответствовала:

a[:, 0] * b

или

a * b[:, None]
4 голосов
/ 30 марта 2012

Добавьте вторую ось к b, чтобы a и b имели одинаковые размеры:

>>> a * b[:,np.newaxis]
array([[ 1.],
       [ 1.],
       [ 1.]])

В качестве альтернативы транспонируйте a, чтобы вещание работало:

>>> a.T * b
array([[ 1.,  1.,  1.]])

(Возможно, вы захотите транспонировать результат.)

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