조금씩 꾸준히 완성을 향해

[Numpy] 배열 연산(산술 연산, 내적 연산, Broadcasting) 본문

Python/Numpy & Pandas

[Numpy] 배열 연산(산술 연산, 내적 연산, Broadcasting)

all_sound 2022. 9. 25. 09:05

산술 연산 (Arithmetic Operators)

-넘파이는 파이썬과 동일하게 배열 간 산술 연산 지원

  • 행렬과 행렬, 벡터와 백터 간 연산이 가능

-같은 배열의 구조일 때 요소별 연산(element-wise operation)

  • 요소별 연산 : 두 배열의 구조가 동일할 경우 같은 인덱스 요소들끼리 연산
# a1 확인
a1 = np.arange(1, 10)
print(a1)
# [1 2 3 4 5 6 7 8 9]
# 여러가지 산술 연산자, 함수
print(a1+1)  #[ 2  3  4  5  6  7  8  9 10]
print(np.add(a1, 10))  #[11 12 13 14 15 16 17 18 19]

print(a1-2)  #[-1  0  1  2  3  4  5  6  7]
print(np.subtract(a1, 10))  #[-9 -8 -7 -6 -5 -4 -3 -2 -1]

print(-a1) #단항 음수  #[-1 -2 -3 -4 -5 -6 -7 -8 -9]
print(np.negative(a1)) #단항 음수  #[-1 -2 -3 -4 -5 -6 -7 -8 -9]

print(a1*2)  #[ 2  4  6  8 10 12 14 16 18]
print(np.multiply(a1, 2))  #[ 2  4  6  8 10 12 14 16 18]

print(a1/2)  #[0.5 1.  1.5 2.  2.5 3.  3.5 4.  4.5]
print(np.divide(a1, 2))  #[0.5 1.  1.5 2.  2.5 3.  3.5 4.  4.5]

print(a1//2) #나눗셈 내림  #[0 1 1 2 2 3 3 4 4]
print(np.floor_divide(a1, 2)) #나눗셈 내림  #[0 1 1 2 2 3 3 4 4]

print(a1**2) #지수연산  #[ 1  4  9 16 25 36 49 64 81]
print(np.power(a1, 2)) #지수연산  #[ 1  4  9 16 25 36 49 64 81]

print(a1 % 2) #나머지 연산  #[1 0 1 0 1 0 1 0 1]
print(np.mod(a1, 2)) #나머지 연산  #[1 0 1 0 1 0 1 0 1]
#2차원에서도 동일하게 산술연산 가능
a2 = np.arange(1, 10).reshape(3,3)
print(a2)
b2 = np.random.randint(1, 10, (3,3))
print(b2)
print(a2+b2)

내적 연산

배열간의 곱셈에서는 요소별 연산과 백터의 내적(dot product) 연산 가능

  • 백터의 내적: 두 배열 간의 곱셈
  • 두 개의 행렬에서 첫 번째 행렬의 열 크기와 두 번째 행렬의 행 크기가 동일해야 가능
  • m * n 행렬과 n * 1 행렬, 벡터의 내적 연산하면 m * l의 행렬생성

x1 = np.arange(1, 7).reshape(2,3)  # 3 x 3
x2 = np.arange(1, 7).reshape(3,2)  # 3 x 2
print(x1)
print(x2)
print(x1.dot(x2))  # 2 x 2
x1 = np.arange(1, 11).reshape(2,5)
x2 = np.arange(1, 16).reshape(5,3)
print(x1)
print(x2)
print(x1.dot(x2))

Broadcasting Operations (브로드캐스팅 연산)

  • 하나의 행렬과 스칼라 값들 간의 연산이나 행렬과 벡터간의 연산
    • 방송국의 전파가 퍼지듯 뒤에 있는 스칼라 값이 모든 요소에 퍼지듯이 연산

x = np.arange(1, 10).reshape(3,3)
print(x)
print(x+10)
print(x*2)
print(x//2)

  • 행렬과 스칼라 값 외에 행렬과 벡터, 벡터와 벡터 간에도 연산 가능
x1 = np.arange(1, 13).reshape(4,3)
x2 = np.arange(10, 40, 10)
print(x1)
print(x2)
print(x1 + x2)