programing

요소별 행렬 곱셈(하다마드 제품)을 numpy로 얻는 방법은 무엇입니까?

projobs 2023. 6. 23. 23:40
반응형

요소별 행렬 곱셈(하다마드 제품)을 numpy로 얻는 방법은 무엇입니까?

나는 두개의 행렬을 가지고 있습니다.

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]]

이것은 원소별 곱이 아니라 행렬 곱입니다.내장된 기능을 사용하여 요소별 제품(일명 Hadamard 제품)을 어떻게 얻을 수 있습니까?

요소별 곱셈의 경우matrix사용할 수 있는 개체:

import numpy as np
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
np.multiply(a,b)

결과

array([[ 5, 12],
       [21, 32]])

하지만, 당신은 정말로 사용해야 합니다.array대신에matrix.matrix물체는 일반 ndarray와 모든 종류의 끔찍한 비호환성을 가지고 있습니다.ndarray를 사용하면 그냥*요소별 곱셈의 경우:

a * b

Python 3.5+에서는 연산자를 사용하여 행렬 곱셈을 수행할 수 있습니다. 행렬 곱셈은 이제 다음과 같습니다.

a @ b  # matrix multiplication

다음과 같이 하십시오.

import numpy as np

a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])

a * b
import numpy as np
x = np.array([[1,2,3], [4,5,6]])
y = np.array([[-1, 2, 0], [-2, 5, 1]])

x*y
Out: 
array([[-1,  4,  0],
       [-8, 25,  6]])

%timeit x*y
1000000 loops, best of 3: 421 ns per loop

np.multiply(x,y)
Out: 
array([[-1,  4,  0],
       [-8, 25,  6]])

%timeit np.multiply(x, y)
1000000 loops, best of 3: 457 ns per loop

둘다요.np.multiply그리고.*아다마드 제품으로 알려진 요소별 곱셈을 산출할 것입니다.

%timeit아이시파이톤 마법

사용해 보십시오.

a = np.matrix([[1,2], [3,4]])
b = np.matrix([[5,6], [7,8]])

#This would result a 'numpy.ndarray'
result = np.array(a) * np.array(b)

여기서,np.array(a)유형의 2D 배열을 반환합니다.ndarray2의 곱셈ndarray요소별 곱셈이 발생합니다.결과는 다음과 같습니다.

result = [[5, 12], [21, 32]]

행렬을 얻으려면 다음과 같이 하십시오.

result = np.mat(result)

언급URL : https://stackoverflow.com/questions/40034993/how-to-get-element-wise-matrix-multiplication-hadamard-product-in-numpy

반응형