[넘파이(Numpy)]N차원 배열의 연산(1) - 사칙연산, 제곱(근), 몫, 내적연산(dot product), 반올림 등

Jihwan Jung·2022년 7월 26일
1

🎲넘파이

목록 보기
5/11
post-thumbnail
post-custom-banner

💡오늘 배울 내용


넘파이로 만들어낸 배열을 연산하는 방법에 대해 알아봅시다.
사칙연산 제곱 제곱근 나머지
내적 연산 dot product
절댓값 올림 내림 버림 반올림

🔎사칙연산


배열에서 덧셈, 뺄셈, 곱셈, 나눗셈 연산은 각 원소끼리의 연산을 의미합니다.
두 2차원 배열 arr1과 arr2를 사칙연산하는 예제를 통해 연산법을 익혀봅시다.

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)
>> [[ 3  4  5]
    [ 6  7  8]
    [ 9 10 11]]

print(np.add(arr1, arr2))
>> [[ 3  4  5]
    [ 6  7  8]
    [ 9 10 11]]

덧셈 연산자(+)를 이용해서 직접 덧셈 연산을 수행할 수도 있고, numpy에서 제공하는 함수 np.add()를 이용할 수도 있습니다.

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)
>> [[-1  0  1]
    [ 2  3  4]
    [ 5  6  7]]

print(np.subtract(arr1, arr2))
>> [[-1  0  1]
    [ 2  3  4]
    [ 5  6  7]]

뺄셈 연산자(-)를 이용해서 직접 연산을 수행할 수도 있고, numpy에서 제공하는 함수 np.substract()를 이용할 수도 있습니다.

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)
>> [[ 2  4  6]
    [ 8 10 12]
    [14 16 18]]

print(np.multiply(arr1, arr2))
>> [[ 2  4  6]
    [ 8 10 12]
    [14 16 18]]

곱셈 연산자(*)를 이용해서 직접 연산을 수행할 수도 있고, numpy에서 제공하는 함수 np.multiply()를 이용할 수도 있습니다.

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)
>> [[0.5 1.  1.5]
    [2.  2.5 3. ]
    [3.5 4.  4.5]]

print(np.divide(arr1, arr2))
>> [[0.5 1.  1.5]
    [2.  2.5 3. ]
    [3.5 4.  4.5]]

나눗셈 연산자(/)를 이용해서 직접 연산을 수행할 수도 있고, numpy에서 제공하는 함수 np.divide()를 이용할 수도 있습니다.

Numpy 함수를 이용한 가감승제 연산
✔덧셈(+) : np.add()
✔뺄셈(-) : np.substract()
✔곱셈(*) : np.multiply()
✔나눗셈(/) : np.divide()

🔎제곱과 제곱근


수학에서 제곱은 같은 수를 두번 곱하는 것이고, 제곱근은 0보다 큰 실수에 대해 a의 제곱근 중 유일한 음이 아닌 실수를 의미합니다. a의 제곱근은 실수 및 복소수 a에 대해 제곱해서 a가 되는 모든 수를 의미합니다.

Numpy에서는 제곱과 제곱근을 쉽게 구할 수 있는 함수를 제공합니다.

arr1 = np.array([[1, 2, 3],
                 [4, 5, 6],
                 [7, 8, 9]])
                 
print(arr1 ** 2)
>> [[ 1  4  9]
    [16 25 36]
    [49 64 81]]

print(np.square(arr1))
>> [[ 1  4  9]
    [16 25 36]
    [49 64 81]]
    
print(np.sqrt(arr1))
>> [[1.         1.41421356 1.73205081]
    [2.         2.23606798 2.44948974]
    [2.64575131 2.82842712 3.        ]]

제곱 연산자(**)를 이용할 수도 있고, numpy에서 제공하는 제곱 함수 np.square()을 이용해도 됩니다. 또한 제곱근은 np.sqrt() 함수를 통해 구할 수 있습니다.

제곱(**) : np.square()
제곱근 : np.sqrt()

🔎몫과 나머지


arr1 = np.array([[1, 2, 3],
                 [4, 5, 6],
                 [7, 8, 9]])
print(arr1 // 2)
>> [[0 1 1]
    [2 2 3]
    [3 4 4]]

print(arr1 % 2)
>> [[1 0 1]
    [0 1 0]
    [1 0 1]]

연산자 //와 %은 몫과 나머지를 계산하는 연산자입니다.

🔎내적 연산(dot product)


벡터 공간에서 정의되는 내적(inner product)을, 유클리드 공간 내에서 정의할 수 있습니다. 이러한 내적 연산을 dot product라고 부릅니다.

arr1 = np.array([2, 3, 4])
arr2 = np.array([1, 2, 3])

print(np.dot(arr1, arr2))
>> 20

1차원 배열에서 dot product를 이용하여 연산한다는 것은, element-wise방식으로 각 원소를 곱한 값들을 더한 내적 연산을 의미합니다.

arr1 = np.array([[1, 0, 1], [0, 1, 0]])
arr2 = np.array([[1, 2], [3, 4], [5, 6]])

print(np.dot(arr1, arr2))
>> [[6 8]
    [3 4]]

2차원 배열(행렬)에서 dot product를 이용하여 연산하면 행렬곱을 계산합니다. [선형대수]기초 행렬 포스팅에서 행렬과 행렬 곱에 대한 개념을 다뤘습니다. 이부분이 궁금하다면 게시글을 찾아보길 바랍니다.

🔎(반)올림, 내림, 버림


배열의 각 원소들에 올림, 내림, 반올림, 버림 연산을 적용하는 방법을 익혀봅시다. Numpy에서는 각 연산을 위한 함수가 존재합니다.

arr1 = np.array([[1.932, -2.339],[-4.145, 5.206]])

#올림
print(np.ceil(arr1))
>> [[ 2. -2.]
    [-4.  6.]]

# 내림
print(np.floor(arr1))
>> [[ 1. -3.]
    [-5.  5.]]

# 반올림
print(np.round(arr1))
>> [[ 2. -2.]
    [-4.  5.]]

# 버림
print(np.trunc(arr1))
>> [[ 1. -2.]
    [-4.  5.]]

Numpy 함수를 이용한 (반)올림, 내림, 버림
✔올림 : np.ceil()
✔내림 : np.floor()
✔반올림 : np.round()
✔버림 : np.trunc()

profile
22.10月~24.07月 공군 암호병 복무중/ 사회 과학과 딥 러닝에 관심이 있는 학부생(CS&E)입니다. 기술과 사회에 대한 이해를 바탕으로, 비즈니스 감각과 기술적 역량을 함께 갖춘 인공지능 프로그래머•데이터 과학자로 성장하고 싶습니다.
post-custom-banner

0개의 댓글