NumPy Tutorial-NumPy 수학 연산 및 방송
이 장에서는 기본 산술 연산 및 행렬 연산과 같은 NumPy 의 연산에 대해 설명합니다.
기본 산술 연산부터 시작하겠습니다.
NumPy 산술 연산
더하기, 빼기, 곱하기 및 나누기는 NumPy 에서 가장 기본적인 산술 연산입니다. 숫자 사이의 일반적인 산술 연산과 유사합니다.
import numpy as np
arrayA = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arrayB = arrayA.T
# array([[1, 2, 3],
# [4, 5, 6],
# [7, 8, 9]])
arrayB = arrayA.T
# array([[1, 4, 7],
# [2, 5, 8],
# [3, 6, 9]])
arrayA + arrayB
# array([[ 2, 6, 10],
# [ 6, 10, 14],
# [10, 14, 18]])
arrayA - arrayB
# array([[ 0, -2, -4],
# [ 2, 0, -2],
# [ 4, 2, 0]])
arrayA * arrayB
# array([[ 1, 8, 21],
# [ 8, 25, 48],
# [21, 48, 81]])
arrayA / arrayB
# array([[1. , 0.5 , 0.42857143],
# [2. , 1. , 0.75 ],
# [2.33333333, 1.33333333, 1. ]])
행렬 곱셈 연산 인*
는 요소를 결과 배열의 같은 위치에 놓기 위해 두 배열의 같은 위치에있는 요소를 곱한다는 점에 유의해야합니다. np.dot
방법으로 계산해야하는 주어진 두 배열의 내적은 아닙니다.
np.dot(arrayA, arrayB)
# array([[ 14, 32, 50],
# [ 32, 77, 122],
# [ 50, 122, 194]])
NumPy 방송
배열 수학 연산에서 두 배열의 모양은 동일해야합니다. 그러나 NumPy 는 broadcasting의 개념을 도입하여 두 배열의 모양이 같지 않은 경우 가능하면 배열을 자동으로 채 웁니다.
이 개념을 예제와 함께 설명하겠습니다.
import numpy as np
arrayA = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arrayA + 1
# array([[ 2, 3, 4],
# [ 5, 6, 7],
# [ 8, 9, 10]])
여기서 1
은 arrayA
의 모든 요소에 추가됩니다. 즉,1
은(1, 1)
모양에서 arrayA
와 같은 모양으로 방송됩니다.-(3, 3 )
를 사용하여 배열 추가 작업을 수행하십시오.
실제 작업은 다음과 같습니다.
arrayA + np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]])
NumPy 의 방송은 아래 시나리오에서도 사용될 수 있습니다.
두 배열의 길이는 한 차원에서 길이가 같고 한 배열의 길이는 다른 차원에서 1입니다
하나의 예부터 시작하겠습니다.
arrayC = np.array([10, 11, 12])
arrayA + arrayC
# array([[11, 13, 15],
# [14, 16, 18],
# [17, 19, 21]])
arrayA
의 모양은(3, 3)
이고 arrayC
의 모양은(3, 1)
입니다. 배열 차원의 기준을 충족하며 arrayC
의 단일 행에있는 데이터는 arrayA
의 모양과 일치하도록 3 개의 행으로 브로드 캐스트됩니다.
두 배열의 행 길이가 동일한 경우에도 적용 가능합니다.
arrayD = np.array([[10], [11], [12]])
# array([[10],
# [11],
# [12]])
arrayA + arrayD
# array([[11, 12, 13],
# [15, 16, 17],
# [19, 20, 21]])
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook