Numpy 난수 관련 함수
난수의 재현성(다시 나타난다)을 확보해보아요
랜덤 값(난수) : 컴퓨터의 난수는 알고리즘에 근거해요. 초기값(seed)을 이용해서 특정 알고리즘을 수행시켜서 난수값을 도출
import numpy as np
np.random.seed(2) #1 ,100,1000 어느 숫자든 넣어도 되요 (초기값 잡는 목적)
arr = np.random.randint(0,100,(5,))#0이상 100미만에서 1차원으로 5개의 난수만 추출해라
print(arr) #난수값을 고정해요
#데이터의 순서를 바꾸려면 어떻게 해야 하나요?? → shfflue() 이용 → shfflue은 ndarray의 원본이 바뀌어요.
arr = np.arange(0,10,2)
print(arr) # [0 2 4 6 8]
np.random.shuffle(arr)
print(arr) # [8 2 0 6 4]
데이터 집합에서 일부를 무작위로 sampling을 수행하기 위해서 사용하는 choice()
numpy.random.choice(a, size, replace, p) p에는 ndarray를 줄 수 있고 각 요소에 확률 값을 줄 수 있어요.
a: ndarray 혹은 정수가 나오면 arange()를 수행한 결과예요.
size : sample 개수
replace=True : 한번 뽑은 걸 다시 뽑을 수 있어요!
p = [0.1, 0.3, 0, 0.1, 0.1, 0.35, 0.05]
밑에서 1이 뽑힐 확률 10% 2는 30% 3은 0% 4는 1%....)
arr = np.array([1,2,3,4,5,6,7])
print(arr) # [1 2 3 4 5 6 7]
result = np.random.choice(arr, 3, replace=False)
print(result) # [5 1 7]
arr = np.array([1,2,3,4,5,6,7])
print(arr) # [1 2 3 4 5 6 7]
result = np.random.choice(arr, 3, replace=False, p = [0.1, 0.3, 0, 0.1, 0.1, 0.35, 0.05])
print(result) # [6 5 2]
여기까지가 random에 관한 주요한 기능들이에요
Numpy의 shape 관련된 함수
a = [[1,2,3],[4,5,6]] #python의 중첩 리스트
arr = np.array(a)
print(arr) #[[1 2 3]
# [4 5 6]]
print(arr.shape) # (2, 3)
arr.shape = (3,2)
print(arr) #[[1 2]
# [3 4]
# [5 6]]
위의 예처럼 shape 속상 값을 직접 변경해서 shape을 변경시키는 것은 좋지 않아요!
대신 제공된 다른 함수를 이용해서 이 작업을 진행해요.
arr = np.arange(0,12,1)
print(arr) # [ 0 1 2 3 4 5 6 7 8 9 10 11]
result = arr.reshape(4,3) #1차원을 2차원으로 바꿔요.
단 result는 ndarray가 아니라 view(장고의 view가 아니라 데이터를 바라보는 창문)예요 → 원본은 그대로 있는데 데이터만(형태) 바뀜 . arr이 원본이고 result는 데이터를 가지고 있지 않아요! arr이 원본 view가 표현하는데 result는 데이터를 다르게 보여주는 역할만 수행
실제 데이터는 arr이 가지고 있어요
원본이 바뀌면 view는 보여주는 역할만 하기 때문에 같이 바뀌어요.
print(result) # [[ 0 1 2]
# [ 3 4 5]
# [ 6 7 8]
#[ 9 10 11]]
arr[0] = 100
print(arr) # [100 1 2 3 4 5 6 7 8 9 10 11]
print(result) # [[100 1 2]
#[ 3 4 5]
#[ 6 7 8]
#[ 9 10 11]]
import numpy as np
arr = np.arange(0,12,1)
print(arr) # 요소가 총 12개인 ndarray를 만들었어요!
print(arr.size) #12
# result = arr.reshape(3,5) #shape이 맞지 않으면 view를 생성할 수 없어요!
# print(result)
result = arr.reshape(2,-1) #reshape 할때 -1은 나는 상관하지마세요(Don't care) 무조건 2행을 만들어요라는 뜻 → 열의개수를 알아서 계산
print(result) [[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
result = arr.reshape(-1,3) # 무조건 3열
print(result)
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
result = arr.reshape(2,3,-1) #2면 3행으로 설정되면 열의 개수가 자동으로 계산됩니다. 사람이
print(result)
[[ 6 7] #계산하지 않고 열의 개수를 지정하기 위해서 -1을 사용 할 수 있어요!
[ 8 9]
[10 11]]]
# result = arr.reshape(3,4) #result는 view가 돼요! 데이터를 가지고 있지 않아요!
# print(result)
result = arr.reshape(3,4).copy() #view가 가 아니라 별도의 ndarray를 만들고 싶어요!
print(result)
arr[0] = 100
print(arr) # [100 1 2 3 4 5 6 7 8 9 10 11]
print(result) #원본은 바뀌지 않아요!
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
import numpy as np
arr = np.arange(0,12,1)
print(arr) # 요소가 총 12개인 ndarray를 만들었어요!
print(arr.size) #12
# result = arr.reshape(3,5) #shape이 맞지 않으면 view를 생성할 수 없어요!
#print(result)
result = arr.reshape(2,-1) #reshape 할때 -1은 나는 상관하지마세요(Don't care) 무조건 2행을 만들어요라는 뜻 → 열의개수를 알아서 계산
print(result)
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
result = arr.reshape(-1,3) # 무조건 3열
print(result)
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
result = arr.reshape(2,3,-1)
print(result)
[[ 6 7]
[ 8 9]
[10 11]]]
result = arr.reshape(3,4) #result는 view가 돼요! 데이터를 가지고 있지 않아요!
print(result)
result = arr.reshape(3,4).copy() #view가 가 아니라 별도의 ndarray를 만들고 싶어요!
print(result)
arr[0] = 100
print(arr) # [100 1 2 3 4 5 6 7 8 9 10 11]
print(result)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
import numpy as np
a = [[1,2,3],[4,5,6]]
arr = np.array(a)
print(arr)
[[1 2 3]
[4 5 6]]
#무조건 1차원 ndarray로 변경시키는 함수가 있어요!
result = arr.ravel() #몇 차원이건 상관없이 무조건 1차원 vector로 만들어 줘요.
print(result) # [1 2 3 4 5 6]
# 한 가지 기억해야 할 사항은 ravle()로 변경된 결과는 ndarray가 아니라 view예요.
arr[0,0] = 100
print(arr)
[[100 2 3]
[ 4 5 6]]
print(result)
[100 2 3 4 5 6] ravle도 view형태예요.
# resize()
arr = np.arange(0,12,1)
print(arr)
[ 0 1 2 3 4 5 6 7 8 9 10 11]
result = arr.resize(3,4)
#None → resize는 결과를 리턴하지 않고 자기 자신을 바꿔요
print(result)
print(arr)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
result = np.resize(arr, (3,4)) #view가 아니라 다른 ndarray가 생성돼요!
print(result)
[100 1 2 3 4 5 6 7 8 9 10 11]
arr[0] = 100
print(arr)
print(result)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
result = np.resize(arr,(3,5))
print(result) # 오류가 나와야 하는데 resize 사용하면 오류를 넘어가서 만들어주기 때문에 조심해야해요.→
resize 대신에 reshape를 쓰세요.
[[1 2 3 4 5]
[6 1 2 3 4]
[5 6 1 2 3]]
'머신러닝 딥러닝' 카테고리의 다른 글
| 0818 Numpy 6 (0) | 2021.08.18 |
|---|---|
| 0817 Numpy5 (0) | 2021.08.17 |
| 0817 Numpy4 (0) | 2021.08.17 |
| 0816 Numpy2 (0) | 2021.08.16 |
| 0816 Numpy (0) | 2021.08.16 |
댓글