Numpy : 파이선에서 산술계산을 위한 가장 중요한 필수 패키지
반복문을 사용하지 않고, 간결한 배열 연산을 사용해 많은 데이타 처리가 용이하다
→ 특히, 브로드캐스팅은 강력한 벡터 연산 방법이다.
생각해보기 : 접근할때, 데이타를 배열 위주로 프로그래밍 한다고 생각의 틀이 변경되어야 할거 같다.
sql을 처음 접하고 쿼리를 작성할 때, 데이타 간의 relation을 잘 생각하면
더 쉽게 어려운 쿼리를 작성하는 것과 비슷한 윈리!!
- ndarray : 다차원 배열 객체
- N차원의 배열객체
- 대규모 데이터 집합을 담을 수 있는 유연한 자료구조
- 전체 데이타 블록에 수학적인 연산을 수행 지원
- type : numpy.ndarray
- P.136 : data + data를 수행하는데, 출력되는 데이타가 이해가 되지 않는다.
- np.shape : 튜플 형태로 가로X세로 형태로 정보 반환
- np.dtype : 배열에 저장된 자료형 출력 (ndarray를 구성하는 원소에는 모두 동일한 자료형이여야 한다.)
- 메모리에 있는 특정 데이타를 해석하기 위한 메타 데이타의미의 객체
- np.ndim : 몇차원으로 구성되어 제공 (shape의 앞의 부분을 의미)
- np.astype(np.int32) : np객체의 타입을 지정하는것 (해당 예제는 int32로 지정하는 샘플)
→ astype을 호출하면, 새로운 dtype이 이전 dtype과 동일해도 새로운 배열을 복사하여 새로 생성한다.
→ 생성된 np객체에 대해서 astype을 이용할수도 있고, np생성시, dtype을 이용해서 생성할 수도 있다.
- arr1 = np.array([1.1, 2.2, 3.3])
arr1.astype(np.int32)) - arr1 = np.array([1.1, 2.2, 3.3], dtype=np.int32)
- arr1 = np.array([1.1, 2.2, 3.3])
- ndarray 생성하기
- np.array(list[])
- np.zeros : 생성시, 값을 0으로 채워서 생성
- np.ones : 생성시, 값을 1로 채워서 생성
- 추가적인 다양한 생성함수는 P.139에 설명되어있다.
- np.array(list[])
- Numpy 백터화 (배열의 산술 연산)
크기가 다른 배열간의 연산 : 브로드캐스팅 이라고 한다.- arr : 2차원 배열 [[1,2,3], [1,2,3]]
- arr * arr
- arr - arr
- arr + arr
- arr / arr
- arr ** arr
- arr > arr : 비교 연산을 해서 boolean연산을 수행한다.
- 슬라이싱
- 리스트와 문법은 동일하다
- [1:3], [1], [:]
- 차이점 : numpy의 슬라이싱은, 원본 배열에 그대로 반영된다.
- Numpy는 대용량 처리를 목적으로 하기 때문에, 복사를 진행하지 않게 설계되었다고 한다.(메모리 및 성능 이슈)
- test_slice = arr[0:3]으로 정의 후, test_slice[0] = "test"라고 정의하면 arr[0]의 값이 변경된다.
- .copy를 통해서 명시적으로 복사 할수 있다.
- 2차원 배열에 대한 Sliding
- twoarr = np.array([1,2,3],[4,5,6],[7,8,9])
- twoarr[2] : out) [7,8,9] 1차원 배열
- twoarr[0][1] / twoarr[0,1] : out) 2
- 아래와 같은 패턴이 가능하고, 데이타를 부분적으로 추출이 가능하다.
- arr[:2, 1:]
- arr[2]
- arr[2, :]
- arr[2:, :]
- arr[:, :2]
- arr[1, :2]
- arr[1:2, :2]
- 3차원 배열에 대한 Sliding
- threearr = np.array( [[ [1,2,3],[4,5,6]] ,[ [7,8,9], [10,11,12]] ])
- threearr[1,1] : out) [10,11,12]
- 리스트와 문법은 동일하다
- boolean값으로 np객체 선택하기
- 2차원 데이타에 대한 boolean처리는 pandas에서 처리하는것이 편하다고 한다.
- and, or (사용불가), &, | (사용가능)
- boolean조건을 걸고, data[조건 == '비교값'] = 변경하려는 값 을 통해서 data의 배열에 값을 변경처리한다.
- data[data > 0 ] = 0
- data[name != 'king'] = 7
- 팬시 색인
- 위에 있는 그림처럼 2차원 배열이 있는 경우
- array[4,3,0,6]은 해당 열에 해당하는 row을 추출
- array[-2,-3,-7] : 끝에서 부터 추출 진행 (즉 뒤에서 부터 순서를 2번째, 3번째, 7번째 값을 추출한다.)
- 위에 있는 그림처럼 2차원 배열이 있는 경우
- 배열 축 바꾸기
- arr.T : 배열의 x,y축 변경
- 3*7 배열 -> 7*3배열
- 데이타는 복사하지 않고 처리한다.
- 3*7 배열 -> 7*3배열
- arr.transpose
- arr.swapaxes
- arr.T : 배열의 x,y축 변경
- 유니버설 함수
- 배열의 각 원소를 빠르게 처리(고속처리)하는 함수,
- ufunc라고 부름
- ndarray안에 있는 데이터 원소별로 연산을 수행
- 하나이상의 스칼라값을 받아서 하나이상의 스칼라 값을 반환 : 백터화된 래퍼 함수
- 단항 유니버설 함수 (P. 160에 상세히 정리됨)
- np.sqrt : 제곱근
- arr ** 0.5 와 동일
- sqry(x^2 + y^2 ) = np.sqry(x **2 + y**2)로 표기 할 수 있다.
- np.exp : 밑이 자연상수 e인 지수함수(e^x)
- np.sqrt : 제곱근
- 이항 유니버설 함수 (P. 160에 상세히 정리됨)
- add, maxium : 2개의 인자를 받는것
- 배열기반 프로그래밍
- np.meshgrid : (x,y) array를 2차원 배열로 가능한 모든 짝을 만든다.
- 조건 걸기
- numpy.where 함수
- np.where(cond, arr1, arr2) :첫번째 인자값의 조건을 체크해서, True이면 두번째 항목, False이면 3번째 항목을 선택
- np.where(arr > 0, 2, -2) : 조건에 맞으면 전부 2로 치환, 틀리면 -2로 치환 하는 기능
- 수학 메소드 (P.167에 메소드 종류 정의)
- sum, mean(평균), std(표준편차)등
2가지 방식으로 추출 가능 : 배열.sum(), np.sum(배열)
- 인자값으로 axis선언하는 방식
1 : raw의 합을 구하라는 의미
0 : 모든 컬럼에 대해서 구하라는 의미
- cumsum / cumprod메소드 : 중간 계산값을 담고 있는 배열 변환
- bool 연산 조회
- any : 하나 이상일때 True
- all : 모두 True일때 True
- 정렬
- arr.sort()
- arr.sort(1) : 다차원 배열의 경우 sort메소드에 넘긴 축의 값에 따라서 1차원 부분 정렬
- 집합 (P.170에 메소드 종류 정의)
- np.unique : 배열내에 중복원소 제거하고, 정렬해서 반환
- np.in1d : 두개의 배열을 받아서 포함여부를 boolean 배열로 반환
- sum, mean(평균), std(표준편차)등
- numpy 파일 입출력
- 텍스트나, 표는 보통 pandas를 이용한다.
- np.save, np.load 배열 데이타 저장 방식
- 저장을 하면 확장자는 npy이고, 해당 파일의 내용은 binary형태의 파일이다.
- np.savez : 어려개의 배열을 압축된 형식으로 저장
- 선형대수
- 행렬의 곱셈, 분할, 행렬식 그리고 정사각 행렬 수학 // 배열을 다루는 중요한 Library
- 2차원 배열 곱셈 : 행렬 곱셈이 아니라, 대응하는 각각의 원소의 곱을 계산
- dot함수 : 행렬곱셈 처리
- 행렬 곱셈 참고 : https://codez.tistory.com/5
- x.dot(y) 는 np.dot(x,y)와 동일한 의미를 가진다.
- numpy.linalg
- 행렬의 분할 과 역행렬, 행렬식을 포함하고 있다.
- P.174 : 주요함수
- numpy.random
- 난수생성
- 파이선의 random 함수와 다르다
- 다양한 종류의 확률분포로 부터 효과적으로 표본값을 생성하는데, 주로 사용됨
- P.175 : 주요 함수
'파이선' 카테고리의 다른 글
데이터 로딩과 저장, 파일형식 (chap6) (0) | 2021.09.02 |
---|---|
pandas 시작하기 (chap5) (0) | 2021.09.01 |
파이썬 언어 기본, IPython, Jupyter 노트북 (chap2) (0) | 2021.08.29 |
시작하기전 개념 설명 (chap1) (0) | 2021.08.29 |
파이썬 라이브러리를 활용한 데이터 분석(Python for Data Analysis (0) | 2021.08.29 |