넘파이로 만들어낸 배열을 연산하는 방법에 대해 알아봅시다.
사칙연산
제곱
제곱근
몫
나머지
내적 연산
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]]
연산자 //와 %은 몫과 나머지를 계산하는 연산자입니다.
벡터 공간에서 정의되는 내적(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()