Base Line/python 기초 코드
Numpy
ylab
2022. 2. 21. 15:07
Numpy(Numerical python)
np.array 함수를 사용하여 배열 생성
리스트와는 다르게 하나의 데이터 type만 배열에 사용가능
=> dynamic typing not supported
리스트는 객체들의 레퍼런스의 모임이지만 배열은 한개의 객체임
import numpy as np
a=np.array([1,2,3,4],float)
print(a)
#astype()메써드로 바꾸기가능
b=a.astype(np.int16)
print(b.dtype)
[1. 2. 3. 4.]
int16
shape 넘파이 배열 차원의 구성을 반환함 // 차원의 길이를 의미
dtype 넘파이 배열 데이터 타입 반환
ndim (number of dimension) 몇차원인지 의미
size 원소개수
import numpy as np
a= np.array([[1,2,3,4],[5,6,7,8],[9,6,2,1]])
print(a.ndim,a.shape,a.size)
2 (3, 4) 12
array의 RANK에 따라 다음과 같이 불림
0 scalar
1 vector
2 matrix
3 3-tensor
n n-tensor
np.array([4.5,5,6],dtype=int)
array([4, 5, 6])
reshape
array의 shape크기를 변경함 원소 개수는 동일(=size만 같으면 가능)
a=[[1,2,3,4],[4,3,2,1]]
np.array(a).shape
(2, 4)
a.reshape(-1,2).shape #-1:size를 기반으로 행(row) 개수 선정
array([1, 2, 3, 4, 4, 3, 2, 1])
a=a.flatten() #다차원 array를 1차원 array로 변환
print(a.shape,a.ndim)
(4, 2)
인덱싱 & 슬라이싱
행과 열 부분 나눠서 슬라이싱 가능
a = np.array([[1,2,3,4,5],[4,5,6,7,8]])
a
array([[1, 2, 3],
[4, 5, 6]])
a[0][1]# a[0]을 만든후에 다시 [1]인덱싱 하므로 느림
2
a[0,1]
2
a[:,2:] #전체 2열이상
a[1,1:3] #1행, 1~2열
a[1:3] #1행~2행 전체
array([[3],
[6]])
배열 생성
a=np.arange(10) #0~10까지
print(a)
b=np.arange(0,5,0.5)
print(b)
c=np.ones((1,5),int)
print(c)
d=np.zeros((1,5),int)
print(d)
e=np.empty((1,5),int)#shape만 주어지고 비어있음
print(e)
f=np.eye(3)#대각선 1인 행렬
print(f)
g=np.eye(3,5,k=2)#k값의 시작 index변경가능
print(g)
h=np.random.random((2,2))
print(h)
i=np.identity(n=3) #단위행렬 생성
print(i)
j= np.full((3,3),1)
print(j)
k = np.arange(9).reshape(3,3)
k=np.diag(k)#대각 행렬의 값 추출
print(k)
l = np.linspace(0,10,num=5) #간격이 동일한 숫자들
print(l)
m = np.random.uniform(0,1,10).reshape(2,5)#균등분포
print(m)
o=np.random.normal(0,1,10).reshape(2,5)#정규분포
print(o)
[0 1 2 3 4 5 6 7 8 9]
[0. 0.5 1. 1.5 2. 2.5 3. 3.5 4. 4.5]
[[1 1 1 1 1]]
[[0 0 0 0 0]]
[[0 0 0 0 0]]
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
[[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]
[[0.76893618 0.99737931]
[0.59870531 0.45823205]]
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
[[1 1 1]
[1 1 1]
[1 1 1]]
[0 4 8]
[ 0. 2.5 5. 7.5 10. ]
[[0.44718027 0.09638236 0.67958903 0.10397707 0.13779765]
[0.10982099 0.92789691 0.70572563 0.27952112 0.80801699]]
[[-0.82595933 -1.10910898 -1.07887584 -1.1625917 0.37258493]
[-1.27214653 -0.91132852 0.31568216 1.02814766 0.1145498 ]]
배열 연산
a= np.arange(9).reshape(3,3)
print(a)
print(a.sum())#모든축
print(a.sum(axis=0))#0번축
print(a.sum(axis=1))#1번축
[[0 1 2]
[3 4 5]
[6 7 8]]
36
[ 9 12 15]
[ 3 12 21]
b=np.arange(27).reshape(3,3,3)
print(b)
print(b.sum(axis=0))
print(b.sum(axis=1))
print(b.sum(axis=2))
[[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]]
[[ 9 10 11]
[12 13 14]
[15 16 17]]
[[18 19 20]
[21 22 23]
[24 25 26]]]
[[27 30 33]
[36 39 42]
[45 48 51]]
[[ 9 12 15]
[36 39 42]
[63 66 69]]
[[ 3 12 21]
[30 39 48]
[57 66 75]]
print(a.mean(),a.mean(axis=0),a.std()) #평균, 표준편차
4.0 [3. 4. 5.] 2.581988897471611
#vstack, hstack, concatenate
a=np.array([1,2,3])
b=np.array([2,3,4])
c=np.vstack((a,b))
print(c)
d=np.hstack((a,b))
print(d)
e=np.concatenate((a,b),axis=0)
#f=np.concatenate((a,b),axis=1) //원래 직선이라 방향이 axis=0뿐임
#print(f)
print(a+b)
print(a-b)
print(a*b)
[[1 2 3]
[2 3 4]]
[1 2 3 2 3 4]
[3 5 7]
[-1 -1 -1]
[ 2 6 12]
#dot 행렬 연산
a = np.arange(1,7).reshape(2,3)
b = np.arange(7,13).reshape(3,2)
print(a.dot(b))
[[ 58 64]
[139 154]]
#transpose
a=np.arange(1,7).reshape(2,3)
print(a.transpose())
print(a.T)
[[1 4]
[2 5]
[3 6]]
[[1 4]
[2 5]
[3 6]]
#broadcating =>shape이 다른 배열간 연산을 지원하는 기능
a=np.array([[1,2,3],[4,5,6]])
scalar=3
print(a+scalar)
#뺄셈, 곱셈, 나눗셈, 몫, 제곱 가능
[[4 5 6]
[7 8 9]]
비교
a=np.arange(10)
print(np.any(a>5)) #하나라도 조건 만족하면 true
print(np.all(a>5)) #모두 만족해야 true
a=np.array([1,2,3])
b=np.array([2,3,4])
print(a>b)
True
False
[False False False]
a=np.array([1,2,4,5,8,78,23,3])
print(np.argmax(a),np.argmin(a))
b=np.array([[1,2,4,7],[9,88,4,12],[1,2,3,4]])
print(np.argmax(b,axis=1),np.argmin(b,axis=0))
5 0
[3 1 3] [0 0 2 2]
a=np.array([2,4,6,8])
b=np.array([0,0,1,3,2,1])
print(a[b])
print(a.take(b))
[2 2 4 8 6 4]
[2 2 4 8 6 4]
print(a>3)
print(a[a>3])
[False False False False True True True True]
[4 5 6 7]
numpy.clip(array,min,max)
array내의 요소들에 대해 min 값보다 작은 값들을 min값으로 바꿔주고
max 값 보다 큰값들은 max로 바꿔줌
array내의 요소들에 대해 min 값보다 작은 값들을 min값으로 바꿔주고
max 값 보다 큰값들은 max로 바꿔줌
#pillow
#array to image
import numpy as np
from PIL import Image
image = Image.open("lena.png")
np_array = np.array(image)
pil_image=Image.fromarray(np_array)
pil_image.show()
from PIL import Image
image = Image.open("lena.png")
np_array = np.array(image)
pil_image=Image.fromarray(np_array)
pil_image.show()
#image to array
from PIL import Image
import numpy as np
img = Image.open("이미지 경로")
check_img = np.array(img)
check_img.shape
import numpy as np
img = Image.open("이미지 경로")
check_img = np.array(img)
check_img.shape
reference: 네이버 커넥트, etc