본문 바로가기
AI Codes/Numpy

Numpy Products

by 아르카눔 2025. 4. 20.

 

넘파이에서 지원하는 element-wise product (Hadamrad product), dot product, matrix multiplication 등등을 알아본다.

 

구체적인 명령어들은 다음과 같다. 

 

  • *
  • np.multiply
  • np.dot
  • @
  • np.inner
  • np.outer
  • np.matmul
  • np.vdot

 

Element-wise Product = Hadamard Product

연산자들

  • *
  • np.multiply

 

1D Array 1차원 배열

 

import numpy as np
a = np.array([1, 2])
b = np.array([3, 4])
             
c = a * b
print(c)

>> [3 8]

c = np.multiply(a, b)
print(c)

>> [3 8]

 

 

2D Array 2차원 배열

 

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

>> [[ 5 12]
 [21 32]]
 
c = np.multiply(a, b)
print(c)
 
>> [[ 5 12]
 [21 32]]
 
 # 상수 곱
 a*2
 
 array([[2, 4],
       [6, 8]])

 

 

서로 차원이 달라도 알아서 브로드캐스팅해서 결과를 도출한다.

 

x1 = np.arange(9.0).reshape((3, 3))
x2 = np.arange(3.0)

print(x1)
print(x2)

x1 * x2

>> 
[[0. 1. 2.]
 [3. 4. 5.]
 [6. 7. 8.]]
[0. 1. 2.]

array([[ 0.,  1.,  4.],
       [ 0.,  4., 10.],
       [ 0.,  7., 16.]])
       
       
np.multiply(x1, x2)

>> 
array([[ 0.,  1.,  4.],
       [ 0.,  4., 10.],
       [ 0.,  7., 16.]])

 

 

 

 

 

Dot Product

PyTorch와는 다르게 2D 이상의 배열에 대해서도 지원한다.

 

연산자들

  • np.dot
  • @

 

1D Array 1차원 배열

 

a = np.array([1, 2])
b = np.array([3, 4])
c = np.dot(a, b)
print(c)
>> 11

 

 

2D Array 2차원 배열

 

np.dot과 @은 같은 연산이다. 

 

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

>> [[19 22]
 [43 50]]
 
 a = np.array([[1, 2],
              [3, 4]])
b = np.array([[5, 6],
              [7, 8]])
c = a @ b
print(c)

>> [[19 22]
 [43 50]]

 

 

Inner product와 계산 방법이 다르다.

수학 시간에 배운 matrix multiplication과 같다.

 

c[0][0] = a[0][0] * b[0][0] + a[0][1] * b[1][0]

c[0][1] = a[0][0] * b[1][0] + a[0][1] * b[1][1]

c[1][0] = a[0][0] * b[1][0] + a[0][1] * b[1][1]

c[1][1] = a[1][0] * b[1][0] + a[1][1] * b[1][1]

 

19 = 1 * 5 + 2 * 7

22 = 1 * 6 + 2 * 8 = 22 

43 = 3*5 + 4*7 = 43

50 = 3 * 7 + 4 * 8 = 50

 

 

Inner Product 내적

 

연산자들

  • np.inner

 

1D Array 1차원 배열

 

np.dot과 같은 결과다.  

a = np.array([1, 2])
b = np.array([3, 4])
c = np.inner(a, b)
print(c)
>> 11

 

 


2D Array 2차원 배열

 

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

>> [[17 23]
 [39 53]]

 

이전에 블로그에서 작성한 PyTorch의 Inner product 계산과 동일하다. (참고 링크)

 

c[0][0] = a[0] * b[0]
c[0][1] = a[0] * b[1]
c[1][0] = a[1] * b[0]
c[1][1] = a[1] * b[1]

17 = 1*5 + 2*6

23 = 1*7 + 2*8
39 = 3*5 + 4*6

53 = 3*7 + 4*8

 

 

 

Outer Product 외적

연산자들

  • np.outer

 

1D Array 1차원 배열

a = np.array([1, 2])
b = np.array([3, 4])
c = np.outer(a, b)
print(c)

>> [[3 4]
 [6 8]]

 

 

Matrix Multiplication, Matrix Product,  행렬 곱

torch.matmul, torch.mm, @을 비교한다.

 

연산자들

  • np.matmul

 

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

print(np.matmul(a, b))

>> [[19 22]
 [43 50]]


np.matmul(b, a)

>> array([[23, 34],
       [31, 46]])

 

 

3차원 이상의 배열 

 

a = np.ones([9, 5, 7, 4])
c = np.ones([9, 5, 4, 3])
print(np.dot(a, c).shape)
np.matmul(a, c).shape
# n is 7, k is 4, m is 3

>> (9, 5, 7, 9, 5, 3)
(9, 5, 7, 3)

 

 

 

 

vdot

Complex number 복소수에 대한 dot product 연산이다.

 

2D 배열의 경우 Frobenius inner product를 반환한다. 

 

연산자들

  • np.vdot
import numpy as np
a = np.array([1+2j, 3+4j])
b = np.array([5+6j, 7+8j])
print(np.vdot(a, b))
np.vdot(b, a)

>> (70-8j)
(70+8j)

 

 

 

 

 

 

 

References:

https://numpy.org/doc/2.2/reference/generated/numpy.matmul.html

https://numpy.org/doc/stable/reference/generated/numpy.multiply.html

https://velog.io/@fooandbar/numpy-%EC%97%AC%EB%9F%AC-%EA%B0%80%EC%A7%80-%EA%B3%B1%EC%85%88%EC%9D%98-%EC%97%B0%EC%82%B0

 

 

'AI Codes > Numpy' 카테고리의 다른 글

Numpy Random Number Generating  (1) 2025.04.20
Numpy zeros, zeros_like, ones 등등  (0) 2025.04.20