ML/NumPy
N차원 배열의 연산
spring_sunshine
2022. 10. 9. 12:30
배열 연산
배열끼리 연산을 진행할 시 배열간의 shape이 동일해야 한다.
arr1 = np.array([[1,2,3], [4,5,6], [7,8,9]])
arr2 = np.array([[2,2,2], [2,2,2], [2,2,2]])
# 덧셈
print(arr1+arr2)
print(np.add(arr1,arr2))
# 뺄셈
print(arr1-arr2)
print(np.subtract(arr1,arr2))
# 곱셈
print(arr1*arr2)
print(np.multiply(arr1,arr2))
# 나눗셈
print(arr1/arr2)
print(np.divide(arr1,arr2))
# 제곱
print(arr1**2)
print(np.square(arr1))
# 제곱근
print(np.sqrt(arr1))
# 몫
print(arr1//2)
# 나머지
print(arr1%2)
행렬 연산
# 1차원 행렬
arr1 = np.array([2,3,4])
arr2 = np.array([1,2,3])
print(np.dot(arr1,arr2))
# 2차원 행렬
arr1 = np.array([[1,2],[4,5]])
arr2 = np.array([[1,2],[0,3]])
print(np.dot(arr1,arr2))
#[1,2] [1,2] [1 8]
#[4,5] [0,3] [4 23]
기타 연산
# 절댓값
arr1 = np.array([[1,-2],[-4,5]])
print(np.abs(arr1))
# 올림
print(np.ceil(arr1))
# 내림
print(np.floor(arr1))
# 반올림
print(np.round(arr1))
# 버림
print(np.trunc(arr1))
연산 함수
arr = np.array([[1,2,3], [0,1,4]])
# min
print(np.min(arr))
print(arr.min())
print(arr.min(axis=0))
print(arr.min(axis=1))
# 0
# 0
# [0 1 3]
# [1 0]
# max
print(np.max(arr))
print(arr.max())
print(arr.max(axis=0))
print(arr.max(axis=1))
# 4
# 4
# [1 2 4]
# [3 4]
# sum
print(np.sum(arr))
print(arr.sum())
print(arr.sum(axis=0))
print(arr.sum(axis=1))
# 11
# 11
# [1 3 7]
# [6 5]
# mean
print(np.mean(arr))
print(arr.mean())
print(arr.mean(axis=0))
print(arr.mean(axis=1))
# 1.8333333333333333
# 1.8333333333333333
# [0.5 1.5 3.5]
# [2. 1.66666667]
# std() 표준편차값
print(np.std(arr))
print(arr.std())
print(arr.std(axis=0))
print(arr.std(axis=1))
# 1.343709624716425
# 1.343709624716425
# [0.5 0.5 0.5]
# [0.81649658 1.69967317]
# cumsum() 누적합
print(np.cumsum(arr))
print(arr.cumsum())
print(arr.cumsum(axis=0))
print(arr.cumsum(axis=1))
# [ 1 3 6 6 7 11]
# [ 1 3 6 6 7 11]
# [[1 2 3]
# [1 3 7]]
# [[1 3 6]
# [0 1 5]]
# median 중앙값
print(np.median(arr))
print(np.median(arr, axis=0))
print(np.median(arr, axis=1))
# 1.5
# [0.5 1.5 3.5]
# [2. 1.]
# 비교연산
arr1 = np.array([[1,2,3],
[4,5,6]])
arr2 = np.array([[1,0,3],
[4,-2,9]])
print(arr1==arr2)
print(arr1>=arr2)
print(np.array_equal(arr1,arr2)) # 배열전체 동일여부
# [[ True False True]
# [ True False False]]
# [[ True True True]
# [ True True False]]
# False
# 삼각함수
arr = np.array([[1,2,3],
[4,5,6]])
# sin()
print(np.sin(arr))
# cos()
print(np.cos(arr))
# tan()
print(np.tan(arr))
# pi
print(np.pi)
# [[ 0.84147098 0.90929743 0.14112001]
# [-0.7568025 -0.95892427 -0.2794155 ]]
# [[ 0.54030231 -0.41614684 -0.9899925 ]
# [-0.65364362 0.28366219 0.96017029]]
# [[ 1.55740772 -2.18503986 -0.14254654]
# [ 1.15782128 -3.38051501 -0.29100619]]
# 3.141592653589793
브로드캐스팅(Broadcasting)
# 3*3 행렬
arr1 = np.array([[0,0,0],
[1,1,1],
[2,2,2]])
# 1*3 행렬
arr2 = np.array([[5,6,7]])
print(arr1+arr2)
# [[5 6 7]
# [6 7 8]
# [7 8 9]]
벡터(행렬) 연산의 장점
- 배열의 연산을 매우 빠르게 처리한다.
- 특히 딥러닝에서 선형대수 관련 연산에서 높은 연산속도를 보인다.
import time
# for문
sum = 0
before = time.time()
for i in arr:
sum += i
after = time.time()
print(sum, after-before, '초')
# [5 7 9] 0.00011706352233886719 초
# 벡터연산
before = time.time()
sum = np.sum(arr)
after = time.time()
print(sum, after-before, '초')
# 21 0.00017762184143066406 초