[python] 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객체의 요소 별 곱셈의 경우 다음을 사용할 수 있습니다 numpy.multiply.

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와 모든 종류의 끔찍한 비 호환성이 있습니다. ndarrays를 사용 *하면 요소 별 곱셈에 사용할 수 있습니다 .

a * b

파이썬 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및 둘 다 *Hadamard Product로 알려진 요소 현명한 곱셈을 산출합니다.

%timeit ipython 마술입니다


답변

이 시도:

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 배열 유형을 반환하고 2를 ndarrayndarray하면 요소 현명한 곱셈이됩니다. 따라서 결과는 다음과 같습니다.

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

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

result = np.mat(result)


답변