[Numpy] index, random, transpose

Ethan·2022년 5월 19일
0
post-custom-banner

index

ndarray는 기본적으로 파이썬의 리스트처럼 사용할 수 있다.

# 3 X 3 행렬의 첫번째 행
A = np.arange(9).reshape(3,3)
print("A:", A)
>>> A: [[0 1 2]
 		[3 4 5]
 		[6 7 8]]

B = A[0]
print("B:", B)
>>> B: [0 1 2]

# (0, 1) = A의 1행에 있는 2번째 값
# 아래 두 코드의 실행 결과는 같다.
print(A[0, 1])
>>> 1

print(B[1])
>>> 1

# 슬라이싱도 마찬가지
print(A[:-1])
>>> [[0 1 2]
 	[3 4 5]]

위 코드처럼 인덱스를 이용해 슬라이싱을 하거나 특정 원소에 접근할 수 있다.


random

numpy는 (당연히) 랜덤 함수를 지원한다.

  • np.random.randint() : 랜덤 정수 생성
  • np.random.choice() : 랜덤 추출
  • np.random.permutation() : 랜덤 순서 변경
  • np.random.normal() : 정규분포를 따르는 난수 생성
  • np.random.uniform() : 2개의 숫자 사이에서 실수인 난수 생성

등이 있다.

# 의사 난수 생성

# 0에서 1사이의 실수형 난수 하나를 생성
np.random.random()

# 0~9 사이 1개 정수형 난수 하나를 생성
np.random.randint(0,10)

# 리스트 원소 중 하나를 랜덤 추출
np.random.choice([0,1,2,3,4,5,6,7,8,9])

# 무작위로 섞인 배열 생성
# 아래 2가지는 기능이 동일함
np.random.permutation(10) 
np.random.permutation([0,1,2,3,4,5,6,7,8,9])

# 정규분포를 따르는 난수 생성
# 평균(loc), 표준편차(scale), 추출개수(size)
print(np.random.normal(loc=0, scale=1, size=5))

# 균등분포를 따르는 난수 생성
# 최소(low), 최대(high), 추출개수(size)
print(np.random.uniform(low=-1, high=1, size=5))

transpose

arr.T : 행렬의 행과 열 맞바꾸기
np.transpose : 축을 기준으로 행렬의 행과 열 바꾸기

A = np.arange(24).reshape(2,3,4)
print("A:", A)
>>> A: [[[ 0  1  2  3]
  		 [ 4  5  6  7]
  		 [ 8  9 10 11]]

 		[[12 13 14 15]
  		 [16 17 18 19]
  		 [20 21 22 23]]]

print("A의 전치행렬:", A.T)
>>> A의 전치행렬: [[[ 0 12]
  				 [ 4 16]
 				 [ 8 20]]

			    [[ 1 13]
 			     [ 5 17]
 				 [ 9 21]]

 				[[ 2 14]
  				 [ 6 18]
 				 [10 22]]

 				[[ 3 15]
 				 [ 7 19]
			     [11 23]]]

print("A의 전치행렬의 shape:", A.T.shape)
>>> A의 전치행렬의 shape: (4, 3, 2)

# np.transpose는 행렬의 축을 어떻게 변환해 줄지 임의로 지정해 줄 수 있는 일반적인 행렬 전치 함수
# np.transpose(A, (2,1,0)) 은 A.T와 정확히 같음
B = np.transpose(A, (2,0,1))
print("A:", A)
>>> A: [[[ 0  1  2  3]
  		 [ 4  5  6  7]
	     [ 8  9 10 11]]

		[[12 13 14 15]
  		 [16 17 18 19]
  		 [20 21 22 23]]]

print("B:", B)
>>> B: [[[ 0  4  8]
  		 [12 16 20]]

 		[[ 1  5  9]
 		 [13 17 21]]

 		[[ 2  6 10]
  		 [14 18 22]]

 		[[ 3  7 11]
 		 [15 19 23]]]

print("B.shape:", B.shape)
>>> B.shape: (4, 2, 3)
profile
재미있게 살고 싶은 대학원생
post-custom-banner

0개의 댓글