안녕하세요 Dibrary입니다.
최근 화두가 되는 데이터 분석 및 빅데이터 등등 데이터가 들어가는 것에 파이썬이 안쓰이는 곳이 없습니다.
데이터를 다루려면 Numpy와 Pandas를 다룰 줄 아는 것이 거진 필수가 되었죠.
그래서, Numpy를 사용하는 방법을 간단하게 정리 해 두고자 합니다.
먼저 따라해보기 위해서는 Jupyter를 실행 해 주세요.
그리고, 터미널을 열어서 pip install numpy를 해 주시면 됩니다.
그러면 알아서 설치가 완료 됩니다.
이제 준비는 끝났습니다. 본격적으로 Numpy를 익혀보겠습니다.
제일 먼저 numpy모듈을 불러들어와야 합니다. 아래와 같이 입력 해 주세요.
위 입력에서 as np는 'numpy라는 명칭을 np라는 별칭으로 앞으로 사용하겠다~' 고 컴퓨터에게 알려주는 겁니다.
5글자를 쳐야 할 순간에 2개만 입력하면 되니까 굉장히 나름 속도가 빨라지겠죠?
가장 기본적인 Numpy배열을 만들어보겠습니다.
10개의 숫자를 0부터 시작해서 np.array라는 함수에 집어 넣었고, 반환된 값이 tmp1에 담겨졌습니다.
type을 확인 해 보면 numpy.ndarray라고 나오는 것을 확인 할 수 있습니다.
여기서 핵심!
ndarray가 바로 Numpy배열입니다. 기존 배열과 모양이 똑같은데 뭐가 다르냐구요?
그럼 기존 배열과 비교를 해 보겠습니다.
임의의 배열 normal을 만들고, ndarray랑 비교를 했더니? 에러가 납니다. 비교 자체가 성립하지 않는군요!.
그러면 하나의 값만 꺼내어서 비교를 하면 어떨까요? 같다고 인식합니다.
자 그러면, 해당 Numpy배열의 모양은 항상 print로 출력을 해야 알 수 있을까요?
그렇지 않습니다. shape라는 속성을 확인 하시면 Numpy배열의 모양을 튜플로 확인할 수 있습니다.
네 임의로 3X3 배열인 tmp2를 만들고 shape로 확인 해 보니 (3,3)으로 Numpy배열의 정보를 알 수 있습니다.
이 외에도, dtype속성은 데이터 자료형을 확인할 수 있고, (Numpy는 반드시 자료형이 같아야 합니다. 아래 참고)
ndim은 차원을 확인할 수 있습니다.
한가지 팁을 드리자면, 이 shape 값을 언패킹 해서 반복문을 돌면 원소의 값을 모두 확인 해 볼 수 있습니다. (파이썬 코딩의 기술 way 13 참고)
Numpy배열의 또 하나 특징으로는, 내부에 들어있는 값들의 자료형은 모두 같아야 합니다.
보시면 정수와 실수를 섞어서 Numpy배열을 만들었고,
확인 하니 자료형은 float64 라고 알려줍니다.
정수로 넣은 값을 확인 해 보니 numpy.float64라고 변환을 합니다.
Numpy는 파이썬과 자료형에 차이를 둬서, C같은 저수준 언어와도 연동이 쉽게 만들었습니다.
Numpy의 자료형을 대략적으로 몇 개만 소개 하겠습니다.
int8, uint8 | 부호가 있는 8비트 정수, 부호가 없는 8비트 정수 |
int64, uint64 | 부호가 있는 64비트 정수, 부호가 없는 64비트 정수 |
float16 | 반정밀도 부동소수점 |
float32 | 단정밀도 부동소수점 |
bool | 불리언형 |
string_ | 고정길이 아스키 문자열 형 |
Numpy배열을 사용해 간단한 산술 연산을 해 보겠습니다.
먼저 배열을 하나 만들어서 사칙연산을 해 보겠습니다.
너무 쉽죠? 그저 Numpy배열에 사칙연산만 하면 내부 데이터들이 모두 적용됩니다.
그러면, 일반 리스트에는 어떨까요? 에러가 납니다.
말 그대로 list에는 사칙연산을 적용할 수 없다는 말이죠.
바로 이 부분에서, 굉장한 속도 차이를 보일 수 있습니다. 임의의 2차원 배열의 모든 원소에 3을 곱하는 계산을 해보겠습니다.
위쪽이 단순 list를 사용한 코드고, 아래쪽이 Numpy를 사용한 코드입니다.
약 3배 이상 차이가 나죠? 데이터가 더 많으면 기하급수적으로 속도 차이가 나게 됩니다.
그래서 Numpy를 파이썬으로 데이터 다룰 때 많이 사용합니다.
만일 프로그램을 만들다가 데이터의 양 + 연산 때문에 병목이 잡힌다면, Numpy를 생각해 보는 것도 좋습니다.
'프로그래밍 > Python' 카테고리의 다른 글
Dixon Q test - 특이치 식별 및 제거, 파이썬으로 구현 (0) | 2022.03.23 |
---|---|
Anderson-Darling 통계 - 정규성 검정, 파이썬으로 확인하기 (0) | 2022.03.16 |
알고리즘을 풀 때 항상 생각해봐야 하는 것 - 복잡도 (0) | 2022.02.16 |
파이썬으로 구현해 확인하는 OPCUA통신 - Server편 (15) | 2022.02.09 |
파이썬으로 구현해 확인하는 OPCUA통신 - Client편 (18) | 2022.02.07 |