배열의 기본 연산
NumPy를 사용하면 반복문 없이도 배열 내 각 요소에 대해 수학적 연산을 수행할 수 있습니다. 모든 연산은 자동으로 벡터화되어, 효율적인 저수준 코드로 데이터 시퀀스를 처리합니다. 즉, 배열에 대한 수학 연산은 각 요소에 대해 자동으로 적용됩니다.
배열과 스칼라 연산
data1 = np.arange(1, 10)
print(data1 + 5)
print(data1 * 3)
출력:
[6 7 8 9 10 11 12 13 14]
[ 3 6 9 12 15 18 21 24 27]
배열 간 연산
data2 = np.array([1, 2, 3, 1, 2, 3, 1, 2, 3])
print(data1 + data2)
print(data1 * data2)
print(data1 ** data2)
출력:
[2 4 6 5 7 9 8 10 12]
[1 4 9 5 10 15 8 16 24]
[ 1 4 27 5 25 125 8 64 216]
일반 단항 함수
각 요소에 대해 작용하는 함수들입니다.
print(np.sqrt(data1))
print(np.log2(data1))
출력:
[1. 1.41421356 1.73205081 2. 2.23606798 2.44948974
2.64575131 2.82842712 3. ]
[0. 1. 1.5849625 2. 2.32192809 2.5849625
2.80735492 3. 3.169925 ]
일반 이항 함수
matrix_a = np.array([[2, 3], [4, 5]])
matrix_b = np.array([[1, 2], [3, 1]])
print(np.power(matrix_a, matrix_b))
print(matrix_a ** matrix_b)
출력:
[[ 2 9]
[64 5]]
[[ 2 9]
[64 5]]
브로드캐스트 메커니즘
다른 크기의 배열 간에도 연산이 가능할 수 있습니다. 조건은 뒤에서부터 시작한 차원이 동일하거나 하나의 차원이 1인 경우입니다.
grid = np.array([[0, 0, 0], [1, 1, 1], [2, 2, 2]])
vector = np.array([1, 2, 3])
result = grid + vector
print(result)
출력:
[[1 2 3]
[2 3 4]
[3 4 5]]
기타 유용한 배열 함수
다음은 흔히 사용되는 다른 배열 조작 함수들입니다.
arr1 = np.array([[1, 1], [2, 2]])
arr2 = np.array([[3, 3], [4, 4]])
# 수평 결합
np.hstack((arr1, arr2))
# 수직 결합
np.vstack((arr1, arr2))
# 축 기준 연결
np.concatenate((arr1, arr2), axis=1)
출력 예시:
[[1 1 3 3]
[2 2 4 4]]
선형 대수 연산
NumPy의 linalg 모듈은 행렬 연산을 위한 다양한 기능을 제공합니다.
주요 함수 정리
inv(): 행렬의 역행렬 계산det(): 행렬식 계산eig(): 고유값과 고유벡터 계산svd(): 특이값 분해solve(): 선형 방정식 시스템 해 찾기lstsq(): 최소제곱 해 계산
mat = np.array([[2., 1.], [1., 3.]])
print(np.linalg.inv(mat))
출력:
[[ 0.6 -0.2]
[-0.2 0.4]]