Numerical Python(Numpy)
행열연산, 대규모 다차원배원을 편리하게 처리 할 수 있도록 지원하는 라이브러리로 데이터 구조 뿐 아니라 고성능의 수치 계산 함수를 제공한다.
=> N차원 배열 객체
=> 기본적으로 array단위로 데이터 관리
=> 큰 규모의 데이터 연산을 빠르게 수행(반복문 없이 배열에 대한 처리 지원)
=> 정교한 브로드캐스팅(Broadcast)기능(크기가 다른 배열 간의 연산 함수를 적용하는 규칙 집합. 크기가 큰 행과 열에 맞춰서 연산한다.)
Scalar vs Vector vs Matrix
Scalar(스칼라) : 숫자 => 24
Vector(벡터) : 숫자들의 list(1차 배열) => [2,-8,4] or [6,
7]
Matrix(행렬) : 숫자들의 2차 배열(rows, columns) [6, 4, 24
1, -3, 4]
ndarray vs list
ndarray => 메모리량이 상대적으로 작다.
서로 다른 타입의 데이터를 담을 수 없다.
내부 반복문을 사용해서 속도가 빠르다.
배열 간에 산술 연산이 가능하다.
Ndarray(다차원 array) => Numpy는 다차원 배열을 지원하고 배열의 구조는 'shape'로 표현된다.
다차원 배열은 입체적인 데이터 구조를 가진다.
데이터 방향은 axis로 표현한다.(0 행, 1 열, 2 채널방향)
list => 사용되는 메모리량이 많다.
서로 다른 타입의 데이터를 담을 수 있다.
numpy 사용하기
import numpy as py #import 모듈명 as 별칭
# 행렬만들기
np.array(행렬로 만들 값)
# 행렬 계산하기
data1 = [[1,2,3],[4,5,6],[7,8,9]]
data2 = [[1,1,1],[2,2,2],[3,3,3]]
a = np.array(data1)
b = np.array(data2)
a*3 #행렬과 스칼리의 곱
a+b #행렬끼리 덧셈
a*b #각각의 인덱스의 값끼리 곱하기
a@b #행렬의 곱하기
np.dot(a,b) #행렬의 곱하기
Numpy의 자료형
1. int(8bit, 16bit, 32bit, 64bit) i1, i2, i4, i8
부호가 있음
비트수 만큼 크기를 가지는 정수형
2. unit(8bit, 16bit, 32bit, 64bit) u1, u2, u4, u8
부호가 없음
비트수 만큼 크기를 가지는 정수형
3. float(16bit, 32bit, 64bit, 128bit) f2, f4, f8, f16
부호가 있음
비트수 만큼 크기를 가지는 실수형
4. 복소수형
complex64 : 두개의 32비트 부동소수점으로 표시되는 복소수 c8
complex128 : 두개의 64비트 부동소수점으로 표시되는 복소수 c16
5. unicode
고정 길이 문자열 unicode
6. bool
True, False
numpy 형변환
np.array(ndarray, dtype=np.자료형)
np.자료형(ndarray)
ndarray.astype(np.자료형)
numpy 자료형 조회
type(ndarray) : numpy.ndarray로 반환되면 배열
ndarray.dtype : 배열의 요소의 자료형
ndarray.dtype.name : 배열의 요소의 자료형 문자열로 리턴
ndarray.itemsize : 요소의 자료형의 바이트 크기
ndarray.data : 실제 저장 된 영역값
Numpy의 차원
0차원 : np.array(숫자1개)
1차원 : np.array([list]), np.array((tuple))
2차원 : np.array([[list 안에 list]])
3차원 : np.array([[[list안에 list안에 list]]]) : 3차원 이상의 다차원 행렬을 Tensor
ndarray.shape : 몇 행 몇 열인지 반환
ndarray.ndim : 몇 차원인지 반환
ndarray.size : 배열 요소의 전체 갯수
# 넘파이의 차원
# 0차원
a = np.array(5)
a.shape #()
a.ndim # 0
# 1차원
a = np.array([5,6,7])
a.shape #(3,)
a.ndim # 1
# 2차원
a = np.array([[9]])
a.shape #(1,1)
a.ndim #2
# 3차원 이상의 다차원 행렬을 Tensor
a = np.array([[[7,4,3]],[[5,7,8]]])
a.shape #(2,1,3)
a.ndim #3
N차원배열 생성
np.aranage(N) : rnage함수처럼 사용. 0~N-1까지의 숫자를 1차원 배열로 리턴
np.arrange(N).reshape(x,y) : N-1까지 숫자 1차원배열을 x행 y열로 재편성
ndarray.reshape(x,y) : 배열을 x행 y열로 재편성
np.zeros((x,y)) : 0으로 이루어진 x행 y열 배열 생성
np.zeros(N) : N의 0으로 이루어진 배열 생성
np.ones((x,y)) : 1로 이루어진 x행 y열의 배열 생성
np.linspace(x,y,N) : x~y까지의 숫자를 N개로 균등 분할하여 배열 생성하기
np.fromfunction(함수명,(x,y)) : x행 y열의 요솟값을 함수의 리턴값을 이용해서 설정하기
def f(x,y) : # x:행인덱스, y:열인덱스
return x+y
a=np.fromfunction(f,(2,3),dtype=int)
a
'''
array([[0, 1, 2],
[1, 2, 3]])
'''
ndarray.ravel() : 다차원 행렬을 1차원으로 변경하기
ndarray.reshape(x,y) : x행 y열 행렬로 변경된 결과값 리턴(실제로 변경되지 않음)
ndarray.reshape(-1,y) : y열 기준으로 맞춰서 자동으로 x행 값 설정
ndarray.reshape(x,-1) : x행 기준으로에 맞춰서 자동으로 y열 값 설정
ndarray.resize(x,y) : x행 y열 행렬로 변경하기
np.eye(x,y) : 단위행렬 생성하기
N차원배열 인덱스
ndarray[인덱스번호]=바꿀값 : 인덱스번호 위치 숫자 변경하기
ndarray[1,1] : 1행1열의 값
ndarray[:2,:2] : 0행부터 1행,0열 1열까지 까지의 값
ndarray[::2,::2] : 0행부터 2씩,0열 2씩 값
ndarray[::3,::3] : 0행부터 3씩,0열 3씩 값
ndarray[1:-1,1:-1] = 바꿀값 : 가장자리는 그대로 내부만 다른값으로 변경하기
np.pad(ndarray,pad_width=N,constant_values=바꿀값) : 가장자리 N줄을 다른값으로 변경하기
ndarray[:]=바꿀값 : 행렬의 전체 요솟값 다른값으로 변경하기
for i in ndarray.flat: : 반복문에서 행렬의 요소들만 리턴
np.nonzero(ndarray) : 요소의 값이 0이 아닌 행렬의 인덱스 출력하기
Numpy의 수학
np.pi : 원주율
np.sin() : 삼각함수 라디안단위로 구함
ndarray1 - ndarray2 : 행렬끼리 뺄셈 (요솟값이 실수형과 정수형이면 실수형으로 맞춰진다.)
ndarray1 + ndarray2 : 행렬끼리 덧셈
ndarray * N : 행렬과 스칼리의 곱
ndarray ** N : 행렬과 스칼리의 N제곱
ndarray1 * ndarray2 : 행렬안의 각각 인덱스의 값끼리 곱하기
ndarray1 @ ndarray2 : 행렬 곱하기
np.dot(ndarray1,ndarray2) : 행렬의 곱하기
ndarray < N : 행렬의 요소들의 조건에 성립하면 True, 성립하지않으면 False로 요소들을 채워서 반환
nadarray.sum(axis=1) : 행렬의 행의 요소들의 합
nadarray.sum(axis=0) : 행렬의 열의 요소들의 합
ndarray.sum() : 행렬의 전체 요소의 합
ndarray.min() : 행렬의 요소 중 최소값
ndarray.max() : 행렬의 요소 중 최대값
ndarray.mean() : 행렬의 요소의 평균
ndarray.std() : 행렬의 요소의 표준편차
ndarry.cumsum() : 행렬의 요소들의 누적값
np.floor : 작은 근사정수
np.ceil : 큰 근사정수
np.vstack((ndarray1,ndarray2)) : 행을 합치기. 열의 갯수가 맞아야한다.
np.hstack((ndarray1,ndarray2)) : 열을 합치기. 행의 갯수가 맞아야한다.
ndarray.sort() : 정렬
random모듈과 Numpy의 random
random모듈
import random as r
r.random() : 0~1까지의 임의의 부동소수점 숫자를 리턴
r.randint(x,y) : x~y까지의 임의의 정수를 리턴
r.uniform(x,y) : x~y까지의 임의의 부동소수점 숫자를 리턴
r.randrange(x,y,N) : range(x,y,N)의 숫자 리스트 중 임의의 숫자를 리턴
I=[1,2,3,4,5,6]
r.shuffle(I) : 리스트 숫자를 무작위로 섞어서 재배치
r.seed(N) : seed를 함께 사용하면 사용하는 동안 계속 같은 임의의 숫자 리턴
numpy의 random
import numpy as np
np.random.random(()) : 0~1까지의 임의의 부동소수점 숫자를 리턴
np.random.randint(x,y) : x~y까지의 임의의 정수를 리턴
np.random.randint(x,y, size=(N)) : 요솟값으로 x~y까지의 임의의 정수들을 N개 가진 배열로 생성
np.random.randint(x,y,size=(a,b)) : 요솟값으로 x~y까지의 임의의 정수들을 a열b행 가진 배열로 생성
np.random.uniform(x,y,size=(a,b)) : 요솟값으로 x~y까지의 임의의 부동소수점 숫자들을 a열b행 가진 배열로 생성
np.random.normal(x,y,size=(a,b)) : normal 사용하면 정규분포값을 가진 난수로 생성
np.random.seed(N) : seed를 함께 사용하면 사용하는 동안 계속 같은 임의의 숫자 리턴
np.random.choice(x,N, replace=False) : 0~(x-1)의 범위에서 N개를 중복없이(replace=False)
#난수값을 이용하여 배열 생성하기
np.random.default_rng(1).random((x,y)) : 임의의 실수형 요소들을 가진 x행 y열 행열 생성
'프로그래밍언어 > Python' 카테고리의 다른 글
[Python] seaborn 모듈 (0) | 2022.01.12 |
---|---|
[Python] pandas 모듈 (0) | 2022.01.12 |
[Python] 정규표현식(re 모듈) (0) | 2022.01.02 |
[Python] 예외 처리 (0) | 2021.12.29 |
[Python] 모듈 (0) | 2021.12.29 |