-
NumpyBase Line/python 기초 코드 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.]int16shape 넘파이 배열 차원의 구성을 반환함 // 차원의 길이를 의미
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) 12array의 RANK에 따라 다음과 같이 불림
0 scalar
1 vector
2 matrix
3 3-tensor
n n-tensornp.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]])
aarray([[1, 2, 3],[4, 5, 6]])a[0][1]# a[0]을 만든후에 다시 [1]인덱싱 하므로 느림2a[0,1]2a[:,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, concatenatea=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]]#transposea=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)) #하나라도 조건 만족하면 trueprint(np.all(a>5)) #모두 만족해야 true
a=np.array([1,2,3])b=np.array([2,3,4])print(a>b)
TrueFalse[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로 바꿔줌#pillow#array to imageimport 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()#image to arrayfrom PIL import Image
import numpy as np
img = Image.open("이미지 경로")
check_img = np.array(img)
check_img.shapereference: 네이버 커넥트, etc'Base Line > python 기초 코드' 카테고리의 다른 글
pillow 이미지 rotation, flip (1) 2022.04.18 data_loader (0) 2022.04.04 Depth_Render.py (0) 2022.03.16 open3d extract depth map from mesh (2) 2022.03.14 path & os (0) 2022.03.09