У меня две матрицы
a = np.matrix([[1,2], [3,4]])
b = np.matrix([[5,6], [7,8]])
и я хочу получить поэлементный продукт [[1*5,2*6], [3*7,4*8]]
, равный
[[5,12], [21,32]]
я пытался
print(np.dot(a,b))
и
print(a*b)
но оба дают результат
[[19 22], [43 50]]
который является матричным произведением, а не поэлементным произведением. Как я могу получить поэлементный продукт (он же продукт Адамара), используя встроенные функции?
a
иb
не являетесь типом матрицы NumPy? С помощью этого класса*
возвращает внутренний продукт, а не поэлементно. Но для обычногоndarray
класса,*
значит поэлементный продукт.a
иb
numpy? Кроме того, в вашем вопросе выше вы используетеx
иy
для вычислений вместоa
иb
. Это просто опечатка?@
для умножения матриц с множеством массивов, что означает, что не должно быть абсолютно никаких причин для использования матриц над массивами.a
иb
составляют списки. Они будут работатьnp.dot
; но не вa*b
. Если вы используетеnp.array(a)
илиnp.matrix(a)
,*
работает, но с другими результатами.Ответы:
Для поэлементного умножения
matrix
объектов можно использоватьnumpy.multiply
:Результат
Однако вам действительно стоит использовать
array
вместоmatrix
.matrix
объекты имеют ужасную несовместимость с обычными ndarrays. С ndarrays вы можете просто использовать*
для поэлементного умножения:Если вы используете Python 3.5+, вы даже не потеряете возможность выполнять умножение матриц с помощью оператора, потому
@
что умножение матриц выполняется сейчас :источник
просто сделай это:
источник
*
оператор выполняет поэлементное умножение.Оба
np.multiply
и*
дадут поэлементное умножение, известное как произведение Адамара.%timeit
это магия ipythonисточник
Попробуй это:
Здесь
np.array(a)
возвращается 2D-массив типа,ndarray
и умножение двухndarray
приведет к поэлементному умножению. Итак, результат будет:Если вы хотите получить матрицу, сделайте это с помощью этого:
источник