numpy는 다차원 배열의 연산 및 수치 연산을 위한 다양한 기능을 제공합니다.
아래는 numpy의 array() 함수를 이용해 numpy 배열(ndarray : n-dimension array)을 생성하는 코드입니다.
import numpy as np
data = np.array([1, 2, 3, 4, 5])
print(data)
print(type(data))
print(data.dtype)
print(data.shape)
다음은 파이썬의 기본 자료 구조인 list와 ndarray의 처리 시간 비교 코드입니다.
각 요소에 2를 더하는 처리 시간은 사용 PC에 따라 차이가 날 것입니다.
import numpy as np
import time
data1 = [x for x in range(100000)]
data2 = np.array(data1)
t1 = time.time()
for i in range(len(data1)):
data1[i] += 2
print(time.time() - t1)
print(data1[-1])
t1 = time.time()
data2 = data2 + 2
print(time.time() - t1)
print(data2[-1])
아래의 표는 다차원 배열 생성을 위해 사용할 수 있는 함수의 예입니다.
numpy.arange() | arange([start, ]stop, [step, ]dtype=None, *, like=None) 입력된 조건을 기반으로 배열을 생성. start ~ stop 사이 정수 개의 배열 생성 |
numpy.array() | array(p_object, dtype=None, *args, **kwargs) 입력된 데이터를 기반으로 배열을 생성 |
numpy.asarray | 입력 데이터를 배열로 변환. 입력 데이터가 ndarray이면 데이터는 복사되지 않음 |
numpy.empty() 또는 numpy.empty_like() |
empty(shape, dtype=None, order='C', *args, **kwargs) -> shape : 2 또는 (2, 3) 등 배열 차원 및 요소의 개수 입력된 shape 및 dtype에 따라 배열을 생성하지만 각 요소의 값은 초기화하지 않음. 따라서 각 요소의 값은 임의의 값으로 채워짐 |
numpy.eye() 또느 numpy.identity() |
eye(N, M=None, k=0, dtype=float, order='C', *, like=None) -> N : 행을 개수 -> M : 열의 개수 왼쪽 위부터 오른쪽 아래 (대각선) 방향으로 1값, 나머지 영역은 0값으로 초기화 |
numpy.ones() 또는 numpy.ones_like() |
ones(shape, dtype=None, order='C', *, like=None) -> shape : 2 또는 (2, 3) 등 배열 차원 및 요소의 개수 입력된 shape 및 dtype에 따라 배열을 생성하고 그 값을 1로 초기화 ones_like(a, dtype=None, order='K', subok=True, shape=None) 입력된 a와 동일한 shape 및 dtype을 가지는 배열을 생성하고 그 값을 1로 초기화 |
numpy.random.rand() | rand(*dn) -> rand(d0, d1, ..., dn) -> rand(2, 3) 등 배열 차원 및 요소의 개수 입력된 조건에 따라 랜덤한 값을 가지는 배열을 생성 (균등분포) |
numpy.random.randn() | 입력된 조건에 따라 랜덤한 값을 가지는 배열을 생성 (표준정규분포) |
numpy.random.randint() | randint(low, high=None, size=None, dtype=None) -> size : 2 또는 (2, 3) 등 배열 차원 및 요소의 개수 입력된 조건에 따라 랜던한 값을 가지는 배열을 생성 (값은 int 타입) |
numpy.reshape() | reshape(self, shape, order='C') -> shape : 2 또는 (2, 3) 등 배열 차원 및 요소의 개수 입력된 조건에 따라 배열의 차원을 변경 reshape((2, 3)) 과 reshape(2, 3)은 동일한 결과를 가짐 |
numpy.zeros() 또는 numpy.zeros_like() |
zeros(shape, dtype=None, order='C', *args, **kwargs) -> shape : 2 또는 (2, 3) 등 배열 차원 및 요소의 개수 입력된 shape 및 dtype에 따라 배열을 생성하고 그 값을 0으로 초기화 |
astype() 메서드를 이용하면 배열 각 요소에 적용되어 있는 타입을 변경할 수 있습니다.
import numpy as np
data1 = np.array([1, 2, 3, 4, 5])
print(data1)
print(data1.dtype)
print()
data2 = data1.astype('int8')
data2[-1] += 100
print(data2)
print(data2.dtype)
print()
print(data1[-1])
print(data2[-1])
정수 (signed) | int8, int16, int32, int64 |
정수 (unsigned) | uint8, uint16, uint32, uint64 |
부동 소수점 | float16 (반 정밀도) float32 (단 정밀도) float64 (배 정밀도) float128 (확장 정밀도) |
복소수 | complex64 complex128 complex256 |
불리언 | bool (True, False) |
object | 파이썬 객체 |
string_ | 고정 길이 문자열 |
unicode_ | 고정 길이 유니코드 |
배열 내 데이터 접근 시 인덱스(index) 또는 슬라이싱(slicing) 사용이 가능합니다. 마지막 코드는 팬시 인덱싱(fancy indexing)의 예입니다.
import numpy as np
data = np.arange(1, 17).reshape(4, 4)
print(data)
print()
print(data[2][2])
print(data[2, 2])
print(data[:2])
# print(data[[0, 2, 3][1]]) # fancy indexing
아래는 배열 내 데이터 접근 시 특정 조건을 만족하는 값만 추출하는 코드입니다. 이러한 방식을 불리언 인덱싱(boolean indexing)으로 부르기도 합니다.
import numpy as np
data = np.random.randint(1, 100, 20)
print(data)
print()
print(data > 80)
print()
print(data[data > 80])
다음은 numpy가 제공하는 산술 연산 함수의 예입니다. -> 사용 예. numpy.add(data1, data2)
add(x1, x2) | 더하기 | mean(a) | 평균값 |
argmax(a) | 최대값의 인덱스 | min(a) | 최소값 |
argmin(a) | 최소값의 인덱스 | sqrt(x) | 제곱근 |
cumsum(x) | 누적 합계 | square(x) | 제곱 |
exp(x) | 지수승 | std(a) | 표준편차 |
log(x) | 로그 | sum(a) | 합계 |
max(a) | 최대값 | var(a) | 편차 |
numpy에서 축을 변경하는 방법은 transpose() 함수 또는 T 속성을 사용하는 것입니다.
import numpy as np
data = np.arange(10).reshape(2, 5)
print(data)
print()
print(data.transpose())
print()
print(data.T)
'코딩 > 파이썬과 데이터 사이언스' 카테고리의 다른 글
파이썬과 데이터 사이언스 : seaborn 제공 mpg 및 그외 데이터셋 (0) | 2022.09.08 |
---|---|
파이썬과 데이터 사이언스 : pandas로 CSV 파일 읽어올 때 encoding 문제 해결 (0) | 2022.09.04 |
파이썬과 데이터 사이언스 : seaborn 라이브러리 (0) | 2022.09.03 |
파이썬과 데이터 사이언스 : matplotlib 라이브러리 (0) | 2022.09.02 |
파이썬과 데이터 사이언스 : pandas 라이브러리 (0) | 2022.08.22 |