전 글에 이어서 진행됩니다.
기본 사칙연산하기(더하기, 빼기, 곱하기, 나누기)
기본적으로 numpy의 연산은 python에서 연산과 비슷한 개념을 갖고 있다. 단 주의해야할 점은 행렬의 갯수가 같아야 한다. m x n 의 데이터 형태면 연산할 데이터의 형태가 모두 같아야 한다. (broadcasting을 활용해 예외도 나올 수 있다. broadcasting은 다음에 알아보도록 하자)
- np.add(x, y) -> 더하기 연산 : 이와 같은 내장함수 형태로 계산을 가능하고, x + y와 같이 연산해도 같은 값이 나온다.
- np.substract(x, y) = x - y -> 빼기 연산
- np.multiply(x, y) = x * y -> 곱하기 연산
- np.divide(x, y) = x / y -> 나누기 연산
통계함수 활용하기(평균, 분산, 중앙, 최대, 최소값 등등)
numpy에는 쉽게 활용할 수 있는 통계 관련 내장함수들이 있다.
- np.mean(x) -> 평균을 내주는 함수 , y.mean()으로도 사용가능하다.
- np.max(x) -> 최대값을 나타내주는 함수
- np.argmax(x) -> 최대값이 몇 번째 순서에 있는지 나타내주는 함수이다. 위 사진과 같이 첫 번째 값이 최대이므로 0을 나타내준다.
- np.var(x), np.median(x), np.std(x) -> 순서대로 분산, 중앙값, 표준편차를 나타내주는 함수이다.
합계함수 활용하기
연산, 통계함수와 마찬가지로 합계함수도 내장되어있다.
- np.sum(x) -> 전체 값들의 합계를 나타내준다.
- np.cumsum(x) -> 값을 누적해 더하면서, 누적합계를 나타내준다.
조건함수 활용하기
출력값을 boolean의 형태로 나타내주는 조건함수들이 있다.
- np.any(조건) -> 특정 조건을 만족하는 것이 하나라도 있으면 True, 아니면 False를 반환(or의 개념)
- np.all(조건) -> 모든 원소가 특정 조건을 만족한다면 True, 아니면 False를 반환(and의 개념)
- np.where(조건, true일때 값, false일때 값) -> 조건에 따라 원하는 값을 얻고 싶을 때 사용하는 함수이다.(if else개념)
선형대수 연산하기 (linalg 서브모듈 활용)
행렬의 역행렬이나, 해를 구하고 싶을 때 사용하는 함수이다.
- np.linalg.inv(x) -> 행렬의 역행렬을 구하고 싶을 때 사용한다.
- np.linalg.solve(x, y) -> Ax = B형태의 선형대수 식에서 x값을 구하고 싶을 때 사용한다.
broadcasting이해하기
broadcasting이란 :
앞에서 shape이 같은 두 ndarray에 대한 연산은 쉽게 할 수 있었다. 하지만 예외로 broadcasting을 활용해 연산되는 두 ndarray가 다른 shape을 갖는 경우, numpy에서 자동적으로 shape을 맞춰준 후 연산해주는 것이다.
broadcasting 연산 규칙 :
1) 차원의 크기가 1일때 가능하다. 두 배열 간의 연산에서 최소한 하나의 배열의 차원이 1이라면(0번 축이든 1번 축이든; 1행이든 1열이든) 가능하다.
2) 차원의 짝이 맞을 때 가능하다. 차원에 대해 축의 길이가 동일하면 브로드캐스팅이 가능하다.
먼저 이와같이 a, b, c, d의 ndarray가 있다고 가정하자.
a는 4x3의 행렬, b는 3개의 값을 갖는 1차원 ndarray이다. 앞서 말한 broadcasting연산 규칙 중 두 번째 규칙인 뒷 차원의 축이 3으로 같아 연산이 가능하다.
반대로 c는 4개의 값을 갖는 1차원 ndarray이다. 차원의 축이 3과 4로 각각 달라 규칙에 어긋나 연산이 불가능하다.
a + d는 d의 차원의 크기중 1이 있어, 1번의 규칙을 만족해 연산이 가능하다.
상수와의 연산
broadcasting을 활용해 상수와도 연산을 할 수 있다. shape은 상관 없다.
사칙연산을 통해 조건에 맞는 값들을 boolean으로 나타낼 수도 있다.
'데이터 사이언스 메뉴얼 > numpy' 카테고리의 다른 글
(SM) 융합연구 - numpy모듈(4) [boolean indexing, axis 축 이해 및 관련 함수활용하기] (0) | 2020.04.15 |
---|---|
(SM) 융합연구 - numpy모듈(2) [인덱싱 슬라이싱, 데이터 변환] (0) | 2020.04.15 |
(SM) 융합연구 - numpy모듈(1) [numpy란?, 데이터 생성하기] (1) | 2020.04.15 |
최근댓글