2 minute read

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 초



인프런: 데이터 과학을 위한 파이썬 NumPy Basic

Tags:

Categories:

Updated: