numpy는 numeric python의 약자로 파이썬의 연산을 빠르게 해주는 패키지이다.
numpy의 메소드들이 엄청 많아서 모든것을 외울 수는 없다.
없으면 찾아서 적용하면 됨!
그래도 최소한 이런 것들이 있다는 것은 알아야 찾아볼 수 있을 것...
기본적으로 numpy는 C를 기반으로 연산하기 때문에, 파이썬의 계산보다 훨씬 빠르다.
따라서 numpy의 메소드에 for문을 사용하는 건 절대 하지말아야 할 일.
1. Array만들기
numpy는 dynamic typing을 지원하지 않음.
여러가지 형의 데이터를 넣을 수 없다.
숫자만 쓰도록 하자.
#Rank 1 Array(1차원)
#Rank 2 Array(2차원)
#3차원은 tensor
import numpy as np
#1차원
x=np.array([1,3,5], np.float64)
x #1., 3., 5.
x[0]=5.2
x #5.2, 3., 5.
x.dtype #float64
x.shape #(3,) 튜플형으로 표현됨
#2차원
y=np.array([[1,2,3],[4,5,6]])
2. x.ndim / x.size / x.reshape / x.flatten
import numpy as np
y=np.array([[1,2,3],[4,5,6]])
#dim : dimension의 개수
y.ndim #2
#size : 전체 데이터의 개수
y.size #6
#reshape : 재배열
y.reshape(2,3,1)
#2차원 3x1로 변경됨
"""
[[[1],
[2],
[3]],
[[4],
[5],
[6]]]
"""
#-1을 넣으면 나머지를 계산해서 알아서 배정. 3x2로 변경됨
y.reshape(-1,2)
#flatten (다차원을 1차원으로 변경해줌)
y.flatten() #[1 2 3 4 5 6]
3. 인덱싱, 슬라이싱
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]], int)
a[0][1] #2
a[0,1] #2 -> [ , ] 를 사용하여 쉽게 불러올수 있다
a[:,2:] #전체 행, 2열 이상
# [[3]
# [6]
# [9]]
4. arrange() / zeros(shape, dtype) / ones(shape, dtype) / eye() / axis
import numpy as np
#arange는 range()와 똑같은 방식으로 사용
b = np.arange(10)
#[0 1 2 3 4 5 6 7 8 9]
#0으로 꽉찬 행렬
a=np.zeros(shape=(10,),dtype=np.int8)
#1x10행렬 [0 0 0 0 0 0 0 0 0 0]
#1로 꽉찬 행렬
b=np.ones(shape=(3,2),dtype=np.int8)
#단위행렬
c=np.eye(3,3) #3x3 단위행렬
#랜덤변수
d=np.random.random((3,3))
print(d)
#축 axis (기준이 되는 dimension 축)
e=np.arange(1,13).reshape(3,4)
#1 2 3 4
#5 6 7 8
#9 10 11 12
e.sum(axis=0)
#[15 18 21 24] 각 열들의 합
e.sum(axis=1)
#[10 26 42] 각 행들의 합
e.mean(axis=1)
#각 행들의 평균
e.std(axis=1)
#각 행들의 표준편차
5. concatenate
import numpy as np
f=np.array([[1,2,3]])
g=np.array([[4,5,6]])
#두 행렬을 붙임(concatenate)
#axis=0이면 상하 결합
np.concatenate((f,g),axis=0)
# [[1 2 3]
# [4 5 6]]
##################################
f=np.array([[1,2],[3,4]])
g=np.array([[4],[5]])
#axis=1이면 좌우 결합
np.concatenate((f,g), axis=1)
# [[1, 2, 4],
# [3, 4, 5]]
6. 행렬 연산(사칙연산, broadcasting)
import numpy as np
g=np.array([[1,2],[3,4]])
h=np.array([[5,6],[7,8]])
g+h
#[[ 6, 8],
# [10, 12]]
g-h
# [[-4, -4],
# [-4, -4]]
g*h
#[[ 5, 12],
# [21, 32]]
g/h
# [[0.2 , 0.33333333],
#[0.42857143, 0.5 ]]
#행렬식 곱하기
g.dot(h)
np.dot(g,h)
#[[19, 22],
# [43, 50]]
#전치행렬
g.T
#broadcasting (다른 배열간 연산을 지원. matrix+scalar도 가능함)
#덧셈, 뺄셈, 곱셈, 나눗셈, 제곱, 몫만 구하기, 나머지만 구하기 모두 가능
g+3
#[[4, 5],
# [6, 7]]
#심지어 4x3행렬과 1x3행렬도 더할 수 있음 (1x3을 4x3으로 늘려서 자체 계산)
7. all() / any() / where() / argmax(), argmin()
import numpy as np
#All or Any
a=np.arange(10)
np.any(a>5) #True
np.any(a<0) #False
np.all(a>5) #False
np.all(a<0) #True
#where
a=np.array([1,3,0])
np.where(a>0,3,2) #(조건, T일때 리턴값, F일때 리턴값)
#[3, 3, 2]
np.where(a>0)
#[0, 1] 인덱스 값을 반환
#argmax, argmin 최대값, 최소값이 있는 인덱스번호를 리턴
a=np.array([1,2,5,8,33,22,57])
np.argmax(a) #6
np.argmin(a) #0
#axis를 사용하면 행이나 열을 기준으로 최대, 최소값의 인덱스번호를 찾을 수 있음
b=np.array([[1,2,5],[10,3,8]])
np.argmax(b,axis=1)
#[2, 0] 행으로 봤을 때 최대값의 인덱스번호.
8. boolean index / fancy index / tile()
import numpy as np
#boolean index
c=np.array([1,4,7,2,5,8,9])
c>3
#[False, True, True, False, True, True, True]
c[c>3]
#[4, 7, 5, 8, 9] 조건에 맞는 값들만 반환
#fancy index - b의 값들을 인덱스값으로 사용해서 a에서 값을 추출
a=np.array([2,4,6,8],float)
b=np.array([0,0,1,3,2,1],int) #반드시 int
a.take(b)
#[2., 2., 4., 8., 6., 4.]
#Tile
i=np.array([1,2,3])
#1줄로 3번 반복
j=np.tile(i,(1,3))
#[1,2,3,1,2,3,1,2,3]
#2줄로 2번반복
k=np.tile(i,(2,2))
#[[1,2,3,1,2,3],
# [1,2,3,1,2,3]]
##기타
np.ones()
np.arange()
np.delete(ndarray, elements, axis)
np.append(ndarray, elements, axis)
np.insert(ndarray, index, elements, axis) -> index앞에 삽입
np.vstack(수직)
np.hstack(좌우)
np.copy(ndarray) (하드카피)
np.diag(ndarray, k=N) (대각선 추출)
np.unique(ndarray) (하나씩)
np.sort(ndarray)
np.sqrt(x) (루트)
np.exp(x)
np.power(x,2) (제곱)
x=np.array()
x[x>10] (boolean도 가능)
x.mean() / x.mean(axis=0)
x.sum() / x.sum(axis=0)
x.std() / x.std(axis=0) (표준편차)
np.median(x) / np.median(x, axis=0)
x.max() / x.max(x, axis=0)
x.min() / x.min(x, axis=0)
'Python > Numpy' 카테고리의 다른 글
| 11-1. Numpy 재정리 - 연산, 인덱싱, 정렬 (0) | 2020.02.18 |
|---|---|
| 11. Numpy 재정리 - 생성, 인덱싱, 슬라이싱, 재구조화 (0) | 2020.02.13 |