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]]
위 코드처럼 인덱스를 이용해 슬라이싱을 하거나 특정 원소에 접근할 수 있다.
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))
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)