Processing math: 100%
 

Numpy 기초 1편

1. numpy

 

고성능 과학 계산용 패키지

 

matrix나 vector같은 array 연산의 사실상 표준

 

일반 리스트에 비해 빠르고 효율적

 

반복문 없이 배열 연산 처리를 지원

 

c,c++ 등 다른 언어와 통합 가능

 

import numpy as np

 

 

2. array에 대하여

 

행렬은 일반적으로 이차원 list를 이용하여 표현한다.

 

예를 들어 [[2,1],[3,2],[3,-1]]은 (213231)을 표현한다.

 

그러나 이렇게 하는 경우 다양한 행렬 계산이 어려워진다.

 

심지어 매우 큰 matrix에 대해 일일이 list로 표현해줄 것인가?

 

리스트는 심지어 메모리도 비효율적이다. 각각의 값이 모두 메모리 주소를 가지기 때문

 

 

3. array의 생성과 특징

 

np.array( <list>,dtype)로 ndarray라는 객체 생성

 

리스트와는 다르게 하나의 데이터 타입만 들어감

 

<list>의 모든 원소가 dtype의 데이터 타입을 가지게 됨

 

etc-image-0
그림1. 1,4,5,8 int형이 float형으로 모두 바뀜

 

모두 int형인 원소가 모두 float로 바뀐 모습

 

etc-image-1
그림2. 모든 원소가 하나의 float로 바뀐 모습

 

문자형과 int 원소가 float로 바뀐 모습

 

리스트처럼 indexing도 가능함

 

list와는 다른 방식으로 데이터를 저장한다

 

etc-image-2
그림3. 리스트와 numpy의 저장방식

 

numpy는 데이터가 차례대로 공간에 바로 투입되어 접근성이 좋고 효율적

 

list는 주소를 1차적으로 할당하고 주소가 가리키는 곳에 2차적으로 값을 할당함

 

etc-image-3
그림4. 리스트와 numpy array의 차이

 

파이썬에서 1은 고정된 메모리 주소를 가지니까 두 리스트의 1이 가리키는 메모리 주소는 동일함

 

그러나 array는 자신만의 공간에 할당하므로 1이 가리키는 메모리 주소가 다름

 

 

4. shape

 

shape는 array의 크기나 형태를 나타낸다 , tuple형태로 반환함

 

etc-image-4
그림5. numpy arrary의 shape 모습

 

(4,) array와 (3,4) array를 나타냈다

 

(4,)의 한 축 4는 (3,4)에서 한칸 뒤로 밀려 (3,4)로 되면서 새로운 축 3이 생김

 

rank가 커질수록 이전 rank의 shape 축들이 한 칸씩 밀려나간다

 

etc-image-5
그림6. 3차원 tensor의 shape

 

5. rank

 

array는 rank를 가진다 np.array().ndim으로 구한다

 

etc-image-6
그림7. numpy array의 rank에 따른 이름

 

etc-image-7
그림8. ndim으로 rank를 구한 모습

 

6. size

 

size는 array 내 데이터의 총 수로 shape 축을 전부 곱하면 된다

 

etc-image-8
그림9. numpy array의 size를 구한 모습

 

7. dtype, nbytes

 

dtype은 array의 각 원소가 가지는 타입

 

데이터 타입마다 차지하는 공간의 크기가 다르다

 

nbytes는 array의 메모리 공간 크기를 구한다

 

메모리 공간 크기가 작다고해서 무조건 좋은 것은 아니다…

 

표현방식이 적절하냐가 일단 중요하니까

 

etc-image-9
그림10/. 데이터타입에 따른 nbyte 차이

 

메모리 공간이 데이터 타입마다 다 다르다는 것을 확인할 수 있다

 

dtype에는 int8로 지정하면 에러가 나고 np.int8로 np.을 붙여줘야함

 

 

728x90

'프로그래밍 > Numpy' 카테고리의 다른 글

Numpy 기초 6편  (0) 2021.11.30
Numpy 기초 5편  (0) 2021.11.29
Numpy 기초 4편  (0) 2021.11.29
Numpy 기초 3편  (0) 2021.11.28
Numpy 기초 2편  (0) 2021.11.27