반응형

안녕하세요.

 

이번 포스팅에서는 파이썬의 numpy에 대해 다뤄보려고 합니다.

 

 

1. Numpy 란?

 

NumPy (Numeric Python)는 행렬 등의 다차원의 배열을 쉽게 다룰 수 있게 해주는 대표적인 라이브러리 입니다.

 

Numpy는 빠르고 메모리를 효율적으로 사용하며, 

 

벡터 산술 연산과 세련된 브로드캐스팅 기능을 제공하는 다차원 배열인 ndarray를 사용 합니다.

 

반복문을 작성할 필요 없이 전체 데이터 배열에 대한 빠른 연센을 제공하는 표준 수학 함수를 제공 합니다.

 

 

Numpy 배열은 동일한 자료형을 가지는 값들이 격자판 형태로 구성 됩니다.

 

numpy의 대표적인 함수들에 대해 알아보겠습니다.

 

* 이후 예시는 'import numpy as np' 로 numpy 모듈을 import 했다는 전재 하에 작성하였습니다.

 

2. numpy.array() : 다양한 형태의 배열을 생성하는 함수

 

다차원 배열을 다양하게 생각 해주는 numpy의 array() 라는 함수가 있습니다.

 

array() 함수 호출 시 매개변수로 리스트를 넘겨주면 됩니다.

 

list 와의 차이를 보기 위해 다음과 같은 코드를 작성 해보았습니다.

 

#코드

lst = [[1,2,3],[4,5,6],[7,8,9]]
npArr = np.array(lst)
print(lst)
print(type(lst))
print(npArr)
print(type(npArr))

# 결과

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
<class 'list'>
[[1 2 3]
 [4 5 6]
 [7 8 9]]
<class 'numpy.ndarray'>

단순 이중 리스트인 lst와 numpy.array() 를 통해 생성한 npArr의 출력 방식과 type이 다르다는 것을 확인하실 수 있습니다.

 

 

3. numpy.arange() : 일정한 범위의 숫자를 Numpy 배열 형식으로 반환하는 함수

 

range() 함수와 numpy.array() 함수를 합쳐놓은 듯한 함수 입니다.

 

range() 함수와 사용법은 동일 하지만, 반환하는 값이 리스트가 아니라 Numpy 배열 입니다.

 

* range(시작값:끝값:건너뛰는범위) -> 시작값 ~ 끝값-1 사이의 수 들로 이루어진 리스트 반환

* numpy.arange(시작값:끝값:건너뛰는범위) -> 시작값 ~ 끝값-1 사이의 수 들로 이루어진 Numpy 배열 반환

 

 

4. numpy.ndim(), numpy.shape() : 차원의 수와 각 차원의 크기를 조회

 

2x3 배열의 경우 (2차원 배열)

 

ndim을 사용하면 2가,

 

shape을 사용하면 (2, 3) 이 반환 됩니다.

 

 

5. numpy.random.randn() : 난수로 다차원 배열을 생성

 

난수를 사용하여 다차원 배열을 생성 합니다.

 

numpy.random.randn(2,3) 을 실행하게 되면

 

2x3의 2차원 배열을 만들고,

 

배열의 값들을 난수로 채우게 됩니다.

 

random.seed() 함수를 사용하여 seed값을 지정하게 되면

 

매번 동일한 값들이 생성되게 됩니다. (테스트 시 사용)

 

 

6. Numpy의 기본 연산

 

Numpy의 편리함은 연산할 때 나타납니다.

 

예를 들어, 다차원 배열의 각 값들에 각각 상수를 곱하고 싶을 때,

 

일반적인 리스트라면 반복문을 사용해야 하지만,

 

Numpy 배열의 경우 일반적인 연산을 통해 각 값들에 특정 수를 곱할 수 있습니다.

 

 -> arr * N # (arr : Numpy 배열, N : 특정 상수)

 

7. numpy.sum() : 배열의 각 열, 각 행의 합

 

Numpy 배열의 각 행, 또는 각 열의 값들을 더해줍니다.

 

사용법은 다음과 같습니다.

 

행 기준 덧셈 : np.sum(Numpy배열명, axis = 0)

열 기준 덧셈 : np.sum(Numpy배열명, axis = 1)

 

빈환은 원본 배열과 결과 배열을 같이 하게 됩니다.

 

sum과 유사하게 사용할 수 있는 함수는 mean (평균), std (표준편차), var (분산), min, max, argmin (최소 원소의 색인값), argmax (최대 원소의 색인값), cumsum (누적합), cumprod (누적곱) 등이 있습니다.

 

위 함수 모두 행 기준으로 사용 시엔 axis=0, 열 기준으로 사용 시엔 axis=1 로 작성해 주시면 됩니다.

 

8. numpy.reshape() : 배열의 모양을 재 정의

 

reshape() 함수를 사용하면 모양이 다시 정의 됩니다.

 

1차원 배열을 2차원으로,

 

2차원 배열을 1차원으로 변경 가능합니다.

 

원본 데이터의 순서를 유지하며 새로운 형태의 배열을 생성 합니다.

 

예시로

 

arr1 = np.array([1, 2, 3, 4])

arr2 = arr1.reshape(2,2)

 

로 작성 하였을 경우, arr2는

[[1 2]

 [3 4]]

 

의 값을 가지게 됩니다.

 

9. Numpy의 인덱싱과 슬라이싱

 

Numpy의 인덱싱과 슬라이싱은 리스트와 거의 비슷 합니다.

 

다차원의 경우 쉼표(',') 로 구분해 주게 됩니다.

 

2차원 배열의 경우

 

arr[1,1] 혹은 arr[1, 2:3] 등으로 표현이 가능 합니다.

 

인덱스와 슬라이싱을 동시에 사용할 수 있습니다.

 

특이한 점은 인덱싱과 슬라이싱을 함께 쓰게되면 1 차원이 줄어든 배열을,

 

슬라이싱과 슬라이싱을 함께 쓰게 되면 기존 차원이 유지된 배열을 반환 하게 됩니다.

 

또한 슬라이싱만을 사용하여 sub 배열을 생성 후, sub 배열의 값을 변경하게 되면 원본 배열의 값도 변하게 됩니다.

 

 

10. 조건 인덱싱과 슬라이싱

 

Numpy 배열에서 특정 조건에 만족하는 값만 가지고 올 수 있습니다.

 

arr 이라는 배열에서 0 보다 큰 값만 가져올 경우

 

arr[arr>0] 으로 표기하시면 됩니다.

 

11. numpy.where() : 조건에 맞는 배열의 값을 선택

 

where 함수는 두 배열의 값 중 조건에 맞는 값을 사용하여 새로운 배열을 만듭니다.

 

사용법은 다음과 같습니다.

 

numpy.where(조건, 배열1, 배열2)

 

조건이 참이면 배열 1의 값을, 거짓이면 배열 2의 값을 사용하여 새로운 배열을 반환 합니다.

반응형
Posted by 해리팍
BLOG main image

Chanhyun Park (해리팍)
Software Engineer @ SK hynix

Contact Info.
parkch0708@hanmail.net
chanhyun0708@gmail.com
chanhyun.park@sk.com

카테고리

All (1502)
Profile (2)
Park's Life (600)
Computer System (165)
Computer Programming (39)
Computer Study (54)
Computer Etc. (189)
Scuba Diving (137)
Golf (8)
Traveling (245)
생활 정보 (12)
Pokemon GO (50)