앞서 배웠던 N차원 배열의 연산(1)에 이어, Numpy의 ndarray에 적용할 수 있는 연산을 배워봅시다.
최솟값
최댓값
평균
표준편차
원소 합
누적 합
중앙값
삼각함수
sin
cos
tan
비교연산자를 이용한 배열 연산
최댓값과 최솟값을 구하는 함수를 익히기 전해, axis=0과 axis=1의 의미를 복습해봅시다.
배웠던 것 처럼, axis=0은 각 열의 모든 행에서 동작합니다 또한 axis=1은 각 행의 모든 열에서 동작합니다.
axis = 0 : 각 열의 모든 행에서 동작
axis = 1 : 각 행의 모든 열에서 동작
arr = np.array([[1, 2, 3],
[0, 1, 4]])
#배열 전체에서 최솟값 계산(서로 같은 표현)
print(np.min(arr))
print(arr.min())
>> 0
print(arr.min(axis=0))
>> [0 1 3]
print(arr.min(axis=1))
>> [1 0]
min()함수는 최솟값을 계산하는 Numpy 함수입니다. np.min(arr)처럼 배열을 괄호 안에 넣어 계산식을 작성할수도 있지만 arr.min()처럼 쓸 수도 있습니다. axis 조건을 지정해주지 않으면 단순히 배열 전체에서의 최솟값을 계산합니다.
arr = np.array([[1, 2, 3],
[0, 1, 4]])
#배열 전체에서 최댓값 계산(서로 같은 표현)
print(np.max(arr))
print(arr.max())
>> 0
print(arr.max(axis=0)) #각 열에 대한 모든 행에서 동작
>> [1 2 4]
print(arr.max(axis=1)) #각 행에 대한 모든 열에서 동작
>> [3 4]
max()함수는 최댓값을 계산하는 Numpy 함수입니다. np.max(arr)처럼 배열을 괄호 안에 넣어 계산식을 작성할수도 있지만 arr.max()처럼 쓸 수도 있습니다. axis 조건을 지정해주지 않으면 단순히 배열 전체에서의 최솟값을 계산합니다.
원소 합과 누적 합을 계산하는 방법을 익혀봅시다. 마찬가지로 axis=0과 axis=1의 의미를 적절히 파악하는 것이 중요합니다.
arr = np.array([[1, 2, 3],
[0, 1, 4]])
#배열 전체에서 원소들의 합 계산(서로 같은 표현)
print(np.sum(arr))
print(arr.sum())
>> 11
print(arr.sum(axis=0)) #각 열에 대한 모든 행에서 동작
>> [1 3 7]
print(arr.sum(axis=1)) #각 행에 대한 모든 열에서 동작
>> [6 5]
sum(axis=0)은 세개의 각 열에 대한 모든 행에서 동작하여 합을 계산하므로 [1 3 7]이라는 1차원 배열이 만들어지고, sum(axis=1)은 두개의 각 행에 대한 모든 열에서 동작하여 합을 계산하므로 [6 5]라는 1차원 배열이 만들어집니다.
배열 원소의 누적합은 첫번째 원소부터 누적하여 더한 결과를 계산하는 것입니다. [1 2 3]을 누적합으로 계산하면 [1 1+2 1+2+3]을 계산하여 [1 3 6]을 출력합니다.
arr = np.array([[1, 2, 3],
[0, 1, 4]])
print(np.cumsum(arr)) #1차원 배열로 생성
print(arr.cumsum()) #1차원 배열로 생성
>> [ 1 3 6 6 7 11]
print(arr.cumsum(axis=0)) #각 열에 대한 모든 행에서 동작
>> [[1 2 3]
[1 3 7]]
print(arr.cumsum(axis=1)) #각 행에 대한 모든 열에서 동작
>> [[1 3 6]
[0 1 5]]
그림으로 좀 더 자세히 이해해봅시다.
arr.cumsum(axis=0)
arr.cumsum(axis=1)
수리통계학에서 통계량으로 사용되는 몇가지 값들의 연산법을 알아봅시다. 마찬가지로 매개변수 axis를 조절하여 원하는 축을 기준으로 한 연산 결과를 뽑을 수 있습니다.
arr = np.array([[1, 2, 3],
[0, 1, 4]])
print(np.mean(arr))
print(arr.mean())
>> 1.8333333333333333
print(arr.mean(axis=0))
>> [0.5 1.5 3.5]
print(arr.mean(axis=1))
>> [2. 1.66666667]
arr = np.array([[1, 2, 3],
[0, 1, 4]])
print(np.std(arr))
print(arr.std())
>> 1.343709624716425
print(arr.std(axis=0))
>> [0.5 0.5 0.5]
print(arr.std(axis=1))
>> [0.81649658 1.69967317]
arr = np.array([[1, 2, 3],
[0, 1, 4]])
print(np.median(arr)) #전체 원소에 대한 중앙값 계산
>> 1.5
print(np.median(arr, axis=0))
>> [0.5 1.5 3.5]
print(np.median(arr, axis=1))
>> [2. 1.]
비교연산자를 이용하여 배열을 연산할 수 있습니다.
arr1 = np.array([[1, 2, 3],
[4, 5, 6]])
arr2 = np.array([[1, 0, 3],
[4, -2, 9]])
print(arr1 == arr2)
>> [[ True False True]
[ True False False]]
print(arr1 > arr2)
>> [[False True False]
[False True False]]
모양과 크기가 같은 배열임을 간단하게 확인 할 수 있습니다.
arr1 = np.array([[1, 2, 3],
[4, 5, 6]])
arr2 = np.array([[1, 0, 3],
[4, -2, 9]])
print(np.array_equal(arr1, arr2))
>> False
삼각함수의 sin, cos, tan연산을 쉽게 할 수 있습니다. 또한 pi값을 어떻게 다루는지 알아봅시다.
arr1 = np.array([[1, 2, 3],
[4, 5, 6]])
# 삼각함수 sin값 구하기
print(np.sin(arr1))
>> [[ 0.84147098 0.90929743 0.14112001]
[-0.7568025 -0.95892427 -0.2794155 ]]
# 삼각함수 cos값 구하기
print(np.cos(arr1))
>> [[ 0.54030231 -0.41614684 -0.9899925 ]
[-0.65364362 0.28366219 0.96017029]]
# 삼각함수 tan값 구하기
print(np.tan(arr1))
>> [[ 1.55740772 -2.18503986 -0.14254654]
[ 1.15782128 -3.38051501 -0.29100619]]
# pi 값 출력하기
print(np.pi)
>> 3.141592653589793