e.g. np.float32 → 실수 표현에 32 bits를 사용한다 → exponent, mantissa, sign → single precision
<리스트와 같은점>
indexing으로 원소에 접근할 수 있음
생성 후 assignment operator를 이용해서 원소의 update가 가능
<리스트와 다른점>
numpy array는 선언한 이후에 크기 변경이 불가능함
■ Numpy Method
□ 라이브러리 호출
>importnumpyasnp
□ Array 생성
파이썬 list를 numpy array로 변환
# numpy array 생성하는 여러 방법
>np.array(list)>np.array(list(range()))>np.arange()
# 생성 예시
>np.array([1,2,3,4,5])>np.array(list(range(10)))# 0~9까지의 array 생성
>np.arange(10,100)# 10~99까지의 array 생성
□ Reshaping array
.reshape(nrow, ncol) 이용
만들고자 하는 행, 열을 지정하여 만들 수 있음
arr.shape()를 통하여 현재의 dimension 확인 가능함
# 기본 구조
>arr=np.array(list)>arr.reshape(nrow,ncol)
# 사용 예시
## 3x3 array 생성하고자 하는 경우
## (9, 0) -> (3,3)으로 변환
>np.arange(1,10).reshape(3,3)## row vector -> col vector
>np.arange(6).reshape(6,1)## 펼치기 (1줄짜리 벡터로 만들기)
### -1: 나머지 숫자를 보고 알맞게 조정함
>np.arange(6).reshape(-1,)
□ Concatenation of Arrays
여러 array 이어 붙이기
기본 파이썬 리스트에서는 list1 + list2를 통해 가능했음
numpy의 array는 같은 방식으로 하면 벡터 연산이 됨 (arr1 + arr2)
# 기본 구조
>np.concatenate([arr1,arr2])# stacking vertically
>np.vstack([arr1,arr2])# stacking horizontally
>np.hstack([arr1,arr2])
□ Array Arithmatic (like vector)
리스트 더하기 연산 : concatenation
e.g. list1 + list2
numpy +, - 연산 : 벡터 연산
e.g. arr1 + arr2
e.g. arr1 - arr2
numpy *, / 연산 : 벡터 연산 (각 원소를 곱함 / 나눔)
e.g. arr1 * arr2
e.g. arr1 / arr2
numpy 내적 : @ 기호 사용
e.g. v1 @ v2
□ Broadcast
서로 크기가 다른 numpy array를 연산할때, 자동으로 전파(broadcast)해주는 기능
행렬곱 연산할 때 편리함
# e.g.
>arr1=np.array([1,2,3])>arr2=np.array([[-1,-1,-1],[1,1,1]])>arr1+arr2([0,1,2],[2,3,4])>arr1*arr2([-1,-2,-3],[1,2,3])
# e.g.
>np.arange(5)+5# array([5, 6, 7, 8, 9])
>np.ones((3,3))+np.arange(3)array([[1.,2.,3.],[1.,2.,3.],[1.,2.,3.]])>np.ones((3,3))+np.arange(3).reshape(3,1)array([[1.,1.,1.],[2.,2.,2.],[3.,3.,3.]])
# e.g. 표준화 하기
>X=np.random.random((10,3))# (10x3)
>X_mean=X.mean(axis=0)# 열별 평균 (1x3)
>X__std=X.std(axis=0)# 열별 표준편차 (1x3)
>Z=(X-X_mean)/X_std# (10x3)
□ Universal Function
broadcast 기능을 확장해서, numpy array의 모든 원소에 동일한 함수를 반복문으로 적용한 것과 같은 효과를 내는 기능
□ Indexing
# 예시
## array 생성
>arr1=np.arange(10)>arr2=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])>arr1[0]# 첫 번째 원소 indexing
# 마지막 원소 indexing
>arr1[9]>arr1[-1]>arr1[:3]# 원소 앞에서부터 3개
# arr2의 2nd row, 3rd column의 원소 indexing
>arr2[1][2]>arr2[1,2]# numpy array indexing에서 추가된 것
# arr2의 세번째 column의 원소들
## arr2[0, 2] arr2[1, 2] arr2[2, 2]
>arr[:,2]# arr2의 두번째 row
>arr2[1,:]# arr2[1]
□ Math Function
>np.random.randn()# 표준정규분포에서 random sampling
>np.random.random()# 0과 1사이의 난수 생성
>np.random.random((m,n))# 0과 1사이의 m*n 행렬의 난수 생성
>np.random.normal(mu,s,(m,n))# 평균이 mu, 표준편차가 s의 정규분포에서 m*n 행렬의 난수 생성
>np.random.randint(a,b,(m,n))# [0, b) 구간의 임의의 정수를 뽑아 m*n 행렬 생성
# 독립적인 난수 생성
>random_state=1>np.random.RandomState(random_state)
>np.float_()# 부동소수점으로 변환 (float64 타입)
>np.abs()# 절대값
>np.square()# 제곱
>np.sqrt()# 제곱근
>np.linspace(start,stop,num)# start부터 stop까지 num 개수의 요소를 가지는 등간격의 1차원 배열 반환
>np.clip(data,a_min=0,a_max=1)# a_min 이하는 0의 값으로, a_max 이상의 값은 1의 값으로 변환함
# 조건에 따른 값 선택
>np.where(condition,[x,y])# condition(조건)이 True일 경우 x 출력, False일 경우 y 출력
# e.g.
>np.where(X>=0.0,1,0)# X가 0보다 클 경우 1, 작을 경우 0
□ Linear Algebra Fucntion
>np.linalg.norm()# 벡터의 크기 norm
>np.linalg.eig()# eigen value, eigen vector
>np.eye(n,dtype=int)# 크기가 n인 단위 행렬 생성
>np.zeros((m,n),dtype=int)# m*n의 영행렬 생성
>np.ones((m,n),dtype=int)# m*n의 1로 채운 행렬 생성
>np.full((m,n),num)# num로 채운 m*n 행렬 생성
□ Aggregation Fucntion
>np.sum(matrix)# 합계
>np.sum(matrix,axis=1)# 행방향 합계
>np.sum(matrix,axis=0)# 열방향 합계
>np.mean(matrix)# 평균
>np.mean(matrix,axis=1):행방향평균>np.mean(matrix,axis=0):열방향평균>np.std(matrix)# 표준편차
>np.min(matrix)# 최소값
>np.argmin(matrix,axis)# 최소값이 있는 index
>np.max(matrix)# 최대값
>np.argmax(matrix,axis)# 최대값이 있는 index
>np.sort(matrix)>np.sort(matrix,axis=0)# 열방향 오름차순
>np.sort(matrix)[::-1]# 내림차순
# index 정렬
>np.argsort(matrix)# 정렬했을 때 원래의 index를 반환
출처: https://arxiv.org/pdf/2209.14734
※ DiGress
a discrete denoising diffusion model for generating graphs with categorical node and edge attributes
...
댓글남기기