컴퓨터/파이썬

파이썬 - Numpy

해피밀세트 2020. 5. 7. 20:54

 

 

 

Numpy

  • 과학계산을 위한 라이브러리로 다차원 배열 처리하는데 필요한 기능을 제공한다.
  • numpy 배열은 동일한 타입의 값을 갖는다.

 

1. 기본 사용법

 

1) numpy array 생성

# 1차원 배열 만들기

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

# 2차원 배열 만들기 (23)

z2 = np.array([[1,2,3],[4,5,6]])

# 2차원 배열 만들기 (33)

lst = [[1,2,3],[4,5,6],[7,8,9]]

z3 = np.array(lst)

# bool타입의 배열 만들기 (33)

b = np.array([[False,True,False],

              [True,False,True],

              [False,True,False]])

 

 

2) 연속되는 수 배열 생성 및 차원 바꾸기

# range로 배열 만들기

np.array(range(20))

# np.arange로 배열 만들기

np.arange(10)
np.arange(3, 10)

# reshape() : 배열모양 바꾸기

a = np.arange(10)
a.shape
a.reshape((5,2))                # 행 우선으로 채움(기본값) 
a.reshape((5,2),order="C")   # 행 우선으로 채움(기본값)
a.reshape((5,2),order="F")   # 열 우선으로 채움

a.reshape((10,),order="C")    # 행을 기준으로 1차원 변경

a.reshape((10,),order="F")    # 열을 기준으로 1차원 변경

# ravel() : 1차원으로 변경

a = np.arange(10).reshape((5,2),order="F")

a.ravel()       # 행을 기준으로 1차원 변경

a.ravel("C")    # 행을 기준으로 1차원 변경

a.ravel("F")    # 열을 기준으로 1차원 변경

# flatten() : 1차원으로 변경

a = np.arange(10).reshape((5,2),order="F")
a.flatten()       #
행을 기준으로 1차원 변경

a.flatten("C")    # 행을 기준으로 1차원 변경

a.flatten("F")    # 열을 기준으로 1차원 변경

x = np.array([[1,2,3],[4,5,6]])
y = np.array([[7,8,9],[10,11,12]])

일때

# np.concatenate() : 행렬 이어붙이기

np.concatenate([x,y],axis=0)  # 행 기준으로 붙이기

np.vstack((x,y))

np.concatenate([x,y],axis=1)  # 열 기준으로 붙이기

np.hstack((x,y))

 

 

3) 배열 채우기

# np.zeros() : 배열에 모두 0으로 채우는 함수

np.zeros((3,3))

# np.ones() : 배열에 모두 1로 채우는 함수

np.ones((4,4))

# np.full() : 배열에 사용자가 지정한 값을 채우는 함수

np.full((3,3),2)

# np.eye() : 대각선으로 1이고 나머지는 0으로 채우는 함수

np.eye(3)    # 33

np.eye(4)    # 44

 

 

4) 배열의 인덱싱 & 슬라이싱 [행, 열]

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

일때

# 행 추출

z3[0]     #
첫번째줄
z3[1]     # 두번째줄

# 열 추출

z3[:,0]   # 모든행의 첫번째열
z3[:,1]   # 모든행의 두번째열
z3[:,2]   # 모든행의 세번째열

# 0,1행의 첫번째열

z3[0:2,0]

# 1행부터 끝까지, 1열부터 끝까지

z3[1:,1:]

# [[1,2,3],[1,2,3]]

z3[[0,2,1],[0,2,2]]

# bool형식으로 인덱싱

c = z3%2==0

z3[c]

 

 

 

 

2. 연산 및 통계

 

1) 배열 모양이 같을때 연산

x = np.array([1,2,3])
y = np.array([4,5,6])

일때

# 더하기

x + y
np.add(x,y)

# 빼기

x - y
np.subtract(x,y)

# 곱하기

x * y
np.multiply(x,y)

# 나누기

x / y
np.divide(x,y)

 

 

2) 배열 모양이 다를때 연산(broadcast) 

x = np.array([[1,2],[3,4]])
y = 10
z = np.array([10,20])

일때

x + y
x + z

 

 

3) 연산 및 통계치

x = np.array([[1,2],[3,4]])
y = np.array([[5,6],[7,8]])

일때

# np.dot() : 행렬의 곱

np.dot(x,y)

# np.sum() : 전체 합

np.sum(x)

np.sum(x,axis=0)  # 행을 기준으로 열의 합

np.sum(x,axis=1)  # 열을 기준으로 행의 합

# np.mean() : 전체 평균

np.mean(x)

np.mean(x,axis=0)  # 행을 기준으로 열의 평균

np.mean(x,axis=1)  # 열을 기준으로 행의 평균

# np.var() : 전체 분산

np.var(x)

np.var(x,axis=0)  # 행을 기준으로 열의 분산

np.var(x,axis=1)  # 열을 기준으로 행의 분산

# np.std() : 전체 표준편차

np.std(x)

np.std(x,axis=0)  # 행을 기준으로 열의 표준편차

np.std(x,axis=1)  # 열을 기준으로 행의 표준편차

# np.max() : 전체 최대값

np.max(x)

np.max(x,axis=0)  # 행을 기준으로 열의 최대값

np.max(x,axis=1)  # 열을 기준으로 행의 최대값

# np.min() : 전체 최소값

np.min(x)

np.min(x,axis=0)  # 행을 기준으로 열의 최소값

np.min(x,axis=1)  # 열을 기준으로 행의 최소값

x = np.array([[1,2],[3,4],[5,0]])

일때

# np.argmin() : 최소값이 있는 인덱스 리턴

np.argmin(x)    # 위치 출력

np.argmin(x.reshape((6,)))

np.argmin(x,axis=0)   

np.argmin(x,axis=1)

# np.argmax() : 최대값이 있는 인덱스 리턴

np.argmax(x)    # 위치 출력

np.argmax(x.reshape((6,)))

np.argmax(x,axis=0)   

np.argmax(x,axis=1)

# np.cumsum() : 누적합

np.cumsum(x)

np.cumsum(x.reshape((6,)))

np.cumsum(x,axis=0)

np.cumsum(x,axis=1)

# np.cumprod() : 누적곱

np.cumprod(x)

np.cumprod(x.reshape((6,)))

np.cumprod(x,axis=0)

np.cumprod(x,axis=1)

# np.prod() : 전체곱

np.prod(x)

np.prod(x.reshape((6,)))

np.prod(x,axis=0)

np.prod(x,axis=1)

 

 

 

 

3. numpy 자료형

  • int, float, bool, complex

 

# int : 정수형

x = np.int8(100)
y = np.int16(100)

# float : 실수형

f = np.float32(1)
# bool : 참/거짓

b = np.bool(0)
# complex : 복소수형

c = np.complex(20)
# 실수형 배열 생성

z = np.arange(5,dtype="f")

 

 

 

 

4. 기타 함수

 

# repeat() : 값을 횟수만큼 반복

x = np.arange(3)

x.repeat(2)

x.repeat([2,3,4])          # 위치별 반복 횟수 지정


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

x.repeat(2)

x.repeat(2,axis=0)

x.repeat(2,axis=1)

 

# np.tile() : 모양대로 횟수 반복

np.tile(x,2)

# np.unique() : 문자안에 유일값만 출력

np.unique([10,10,20,20,30,30,30])

x = np.array(['a','a','b','b','b','a','c','c'])

np.unique(x)

# np.unique(return_counts=True) : 빈도수까지 출력

np.unique(x,return_counts=True)

index, cnt = np.unique(x,return_counts=True)

print(index)

print(cnt)

 

# 행, 열 별로 유일값 출력

y = np.array([[1,0,0],[1,0,0],[1,0,0]])

np.unique(y)

np.unique(y,axis=0)

np.unique(y,axis=1)

 

data1 = np.arange(0,20,2)
data2 = np.arange(0,30,3)

일때

# 인덱스 값 비교

data1 == data2

data1 >= data2

data1 <= data2

# 인덱스 끼리 비교해서 최대값 출력np.maximum(data1,data2)

# 인덱스 끼리 비교해서 최소값 출력

np.minimum(data1,data2)

# 합집합

np.union1d(data1,data2)

# 교집합

np.intersect1d(data1,data2)

# 차집합 (순서 상관 있음)

np.setdiff1d(data1,data2)

np.setdiff1d(data2,data1)

# array값들 정렬(인덱스 번호로 출력)

x = np.array([5,2,4,7,1])

x.argsort()             # 오름차순

x[x.argsort()]          # 실제값으로 보기

x.argsort()[::-1]       # 내림차순

x[x.argsort()][::-1]    # 실제값으로 보기

ix = x.argsort()[::-1]

x[ix]

 

반응형