[NumPy] Ch3. N차원 배열 연산법
3-1. 배열의 연산1: 사칙연산/제곱/제곱근/몫/나머지
arr1 = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
arr2 = np.array([[2, 2, 2],
[2, 2, 2],
[2, 2, 2]])
사칙연산
일반 연산자를 사용하거나 np모듈 사용
print(arr1 + arr2)
print(np.add(arr1, arr2)) # np 모듈 이용
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 ** 3)
print(np.square(arr1))
# 제곱근
print(np.sqrt(arr1))
몫/나머지
# 몫
print(arr1 // 2)
# 나머지
print(arr1 % 2)
3-2. 배열의 연산2: 내적/절댓값/올림/내림/반올림/버림
내적(dot product)
# 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)) # 행렬의 곱
절댓값
np.abs
arr1 = np.array([[1, -2],
[-4, 5]])
print(np.abs(arr1))
올림/내림/반올림/버림
arr1 = np.array([[1.9, -2.33],
[-4.234, 5.42332]])
print(np.ceil(arr1)) # 올림
print(np.floor(arr1)) # 내림
print(np.round(arr1)) # 반올림
print(np.trunc(arr1)) # 버림
3-3. 배열의 연산3: 최소/최대/합/평균/표준편차/누적덧셈/중앙값
최소/최대
min(): 원소 중 가장 작은 값 반환
print(np.min(arr))
print(arr.min())
print(arr.min(axis=0)) # 일단 보류..
print(arr.min(axis=1))
max(): 원소 중 가장 큰 값 반환
print(np.max(arr))
print(arr.max())
print(arr.max(axis=0)) # 일단 보류..
print(arr.max(axis=1))
합/평균
sum(): 모든 원소들의 합
print(np.sum(arr))
print(arr.sum())
print(arr.sum(axis=0)) # 일단 보류..
print(arr.sum(axis=1))
mean(): 원소들의 평균 값
print(np.mean(arr))
표준편차/누적덧셈/중앙값
std(): 원소들의 표준편차 값
print(np.std(arr))
cumsum(): 원소들을 누적하여 덧셈
print(np.cumsum(arr))
median(): 원소들의 중앙값을 반환
- 원소의 개수가 짝수인 경우 두 원소의 사잇값을 반환
print(np.median(arr))
3-4. 배열의 연산4: 비교 연산, 삼각 함수
비교 연산
동일한 인덱스의 원소를 비교하고, 인덱스 각각에 대한 boolean 값을 반환
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)) # 배열의 모든 원소가 동일한가
삼각함수
각 원소의 sin/cos/tan 값 반환
print(np.sin(arr1))
print(np.cos(arr1))
print(np.tan(arr1))
print(np.pi) # 원주율 값
3-5. 브로드캐스팅(Broadcasting)
브로드캐스팅
행렬 곱을 해야하는데 일일이 shape를 변경하기 귀찮음
넘파이가 알아서 shape를 변경, 확장시킴
arr1 = np.array([[0, 0, 0],
[1, 1, 1],
[2, 2, 2]])
arr2 = np.array([[5, 6, 7]]) # 각괄호 굳이 두개?
print(arr1 + arr2)
arr1 = np.array([[1, 1, 1]])
arr2 = np.array([[0],
[1],
[2]])
print(arr1 + arr2)
3-6. 벡터 연산의 장점
높은 처리속도
배열의 연산을 빠르게 처리 가능
# 일반 연산
import time
arr = np.arange(99999999)
sum = 0
before = time.time()
for i in arr:
sum += i
after = time.time()
print(sum, after - before, "초")
출력값: 4999999850000001 21.36401057243347 초
# 벡터 연산
before = time.time()
sum = np.sum(arr)
after = time.time()
print(sum, after - before, "초")
출력값: 4999999850000001 0.1292731761932373 초