Python/Numpy

Numpy_02

BSHwan 2019. 8. 11. 17:15
반응형
day1_Numpy2

random 모듈

  • 외부 모듈 : import random
  • random.random(): 0 부터 1 사이의 부동소수점(float) 숫자를 리턴한다
  • random.randint(최소, 최대) : 입력 파라미터인 최소부터 최대까지 중 임의의 정수를 리턴한다
  • random.randrange(시작,끝[,간격]) : 입력 파라미터인 시작부터 끝값까지 (지정된 간격으로 나열된) 숫자 중 임의의 정수를 리턴한다
  • random.uniform(최소, 최대) : 입력 파라미터인 최소부터 최대까지 중 임의의 부동소수점(float) 숫자를 리턴한다
In [1]:
import random
In [5]:
# 0~1 사이 1개 실수형 난수 
random.random()
Out[5]:
0.8743363759284282
In [6]:
random.random()
Out[6]:
0.8883683675727456
In [8]:
# 1~5 사이 1개 정수형 난수
random.randint(1,6)
Out[8]:
5
In [11]:
random.randint(1,6)
Out[11]:
5
In [20]:
# 2부터 100 사이의 임의의 짝수
random.randrange(2, 101, 2) 
Out[20]:
76
In [22]:
random.randrange(1, 101, 2) 
Out[22]:
63
In [24]:
# 지정된 범위에서 실수형 난수 발생 
random.uniform(-1,-2)
Out[24]:
-1.2576644220176485
In [27]:
random.uniform(-1,-2)
Out[27]:
-1.7344722551044165

random.choice() 알아보기

  • random.choice?
  • random.choice(리스트) : 리스트에서 임의의 원소 1개 출력
In [28]:
# 간단한 문법 레퍼런스 창 보기 
random.choice?
In [32]:
random.choice(['철수','영희','로미오','줄리엣','지니'])
Out[32]:
'영희'
In [384]:
random.choice(['철수','영희','로미오','줄리엣','지니'])
Out[384]:
'로미오'

random.sample() 알아보기

  • random.sample?
  • random.sample(집합형자료, 갯수) : 리스트에서 임의의 원소 출력
In [33]:
random.sample?
In [36]:
# 숫자리스트 샘플링
numlist = [1,2,3,4,5,6,7,8,9]
random.sample(numlist, 3)
Out[36]:
[9, 6, 4]
In [41]:
# 튜플 샘플링
frutes = ('사과', '귤', '포도', '배')
random.sample(frutes, 2)
Out[41]:
['배', '사과']
In [ ]:
 
In [ ]:
 

Numpy 모듈 임포트

In [42]:
import numpy as np 

Numpy 배열의 난수값 지정하기

  • np.random.rand(갯수)
  • np.random.rand(행수,열수)
  • 0부터 1사이에서 실수 난수를 생성
In [44]:
np.random.rand(5)
Out[44]:
array([0.24284405, 0.61535374, 0.9346142 , 0.00777073, 0.17518086])
In [43]:
np.random.rand(2,3)
Out[43]:
array([[0.75574443, 0.06584445, 0.80332791],
       [0.00288947, 0.83621097, 0.21811676]])

Numpy 배열의 난수값 지정하기 : randn()

  • np.random.randn(갯수)
  • np.random.randn(행수,열수)
  • 기댓값이 0이고 표준편차가 1인 가우시안 표준 정규 분포를 따르는 난수를 생성
In [33]:
np.random.randn(5)
Out[33]:
array([0.17246941, 2.75169576, 1.66726797, 0.65488599, 2.9981343 ])
In [34]:
np.random.randn(2,3)
Out[34]:
array([[ 0.44459422, -0.33573289, -3.01853014],
       [-0.47932919,  0.10499568, -0.7427562 ]])

Numpy 배열의 난수값 지정하기 : randint()

  • np.random.randint(low, high, size=갯수) : 1차
  • np.random.randint(low, high, size=(행,열)) : 2차
  • high를 입력하지 않으면 0과 low사이의 숫자, high를 입력하면 low와 high는 사이의 숫자를 출력한다.
  • 음수부터 양수까지고 지정 가능하다
  • size는 난수의 숫자이다.
  • 정수형 0포함 양수 난수를 생성할 때 사용한다.
In [82]:
# 0~9 
np.random.randint(10)
Out[82]:
4
In [136]:
# 1~5
np.random.randint(1,6)
Out[136]:
3
In [117]:
# 1~9 난수 3개 
np.random.randint(1,10, size=3)
Out[117]:
array([1, 1, 6])
In [139]:
# 음수 ~ 양수로 범위 확장 
np.random.randint(-10,11,size=5)
Out[139]:
array([-4,  7, -8, -5,  4])
In [120]:
# 10~19 난수 3행 5열 구성 
np.random.randint(10, 20, size=(3, 5))
Out[120]:
array([[12, 19, 13, 11, 12],
       [19, 12, 13, 15, 13],
       [10, 17, 12, 14, 16]])

np.random.seed()

  • 한번 발생한 난수를 다시 표시할 때 사용 => 시드 메모리에 기억
  • np.random.seed(숫자)
  • 숫자는 0~양의 정수
  • np.random.seed(숫자)로 시드 지정 후 난수 생성
  • 난수 호출때에도 다시 np.random.seed(숫자)로 시드 지정 후 난수 생성
In [48]:
# np.random.seed() : 시드 0으로 설정 
np.random.seed(1)
np.random.rand(10)
Out[48]:
array([4.17022005e-01, 7.20324493e-01, 1.14374817e-04, 3.02332573e-01,
       1.46755891e-01, 9.23385948e-02, 1.86260211e-01, 3.45560727e-01,
       3.96767474e-01, 5.38816734e-01])
In [46]:
# 시드를 호출하지 않은 경우 => 새로운 난수 생성 
np.random.rand(10)
Out[46]:
array([0.79172504, 0.52889492, 0.56804456, 0.92559664, 0.07103606,
       0.0871293 , 0.0202184 , 0.83261985, 0.77815675, 0.87001215])
In [49]:
# 시드 호출 
# 위의 시드 0 지정후의 난수값과 같은지 확인 
np.random.seed(1)
np.random.rand(10)
Out[49]:
array([4.17022005e-01, 7.20324493e-01, 1.14374817e-04, 3.02332573e-01,
       1.46755891e-01, 9.23385948e-02, 1.86260211e-01, 3.45560727e-01,
       3.96767474e-01, 5.38816734e-01])
In [50]:
# 시드 123으로 설정 후 정수난수 생성 
np.random.seed(123)
np.random.randint(10)
Out[50]:
2
In [57]:
np.random.randint(10)
Out[57]:
1
In [61]:
# 위의 시드 123 지정후의 난수값과 같은지 확인 
np.random.seed(123)
np.random.randint(10)
Out[61]:
2
In [62]:
# 시드 54321 로 설정 후 난수 생성 
np.random.seed(54321)
np.random.randn(3,3)
Out[62]:
array([[ 0.22397889,  0.7445909 , -0.33426894],
       [ 1.38917151, -2.29609451,  1.14120478],
       [ 0.05544775, -0.08276013, -0.65168766]])
In [63]:
np.random.randn(3,3)
Out[63]:
array([[-0.01602191, -0.57446469,  0.04814256],
       [ 0.49949734,  0.15539682,  0.76254251],
       [ 0.56048876,  0.33248345, -0.54542288]])
In [64]:
# 위의 시드 54321 지정후의 난수값과 같은지 확인 
np.random.seed(54321)
np.random.randn(3,3)
Out[64]:
array([[ 0.22397889,  0.7445909 , -0.33426894],
       [ 1.38917151, -2.29609451,  1.14120478],
       [ 0.05544775, -0.08276013, -0.65168766]])

np.random.choice()

  • 리스트에서 무작위로 n개의 데이터를 추출할 때 사용한다.
  • np.random.choice(데이타형은숫자/리스트, size=샘플숫자, replace=True/False, p=리스트)
  • 데이타형이 리스트이면 데이터, 정수이면 arange(a) 명령으로 데이터를 생성한다.
  • size : 정수. 샘플 숫자
  • replace : 불리언. True이면 한번 선택한 데이터를 다시 선택 가능하다. 중복허용
  • p : 리스트형태. 각 데이터가 선택될 수 있는 확률로 소숫점 단위로 지정
In [244]:
# 0~10사이의 숫자중에서 4개를 중복허용으로 생성 
np.random.choice(11, size=4, replace=True)
Out[244]:
array([ 6,  5, 10,  1])
In [241]:
np.random.choice(11, size=4, replace=True)
Out[241]:
array([9, 9, 8, 1])
In [65]:
# 리스트에서 3개를 중복을 허용하지 않고 생성 
np.random.choice(['사자','코끼리','펭귄',
                  '물소','기린','얼룩말','토끼'], 
                 size=3, replace=False)
Out[65]:
array(['토끼', '사자', '펭귄'], dtype='<U3')
In [72]:
# 리스트에서 3개를 중복을 허용하지 않고 생성 
np.random.choice(['사자','코끼리','펭귄',
                  '물소','기린','얼룩말','토끼'], 
                 size=3, replace=False)
Out[72]:
array(['기린', '물소', '펭귄'], dtype='<U3')
In [93]:
# 선택 확률을 다르게 해서 2개 선택
# 0~4 범위에서 0,1,2,3,4 숫자중 2개 선택
# p 는 아이템의 갯수만큼 리스트로 구성 
# p의 값은 0~1 소숫점으로 표시 . p전체의 합은 1
np.random.choice(5, size=2, p=[0, 0.2, 0.7, 0.1, 0])  
Out[93]:
array([2, 2], dtype=int64)
In [104]:
np.random.choice(['꽝','하와이 왕복티켓 2매', 
                  '스타벅스 상품권 5만원' ], 
                 1, 
                 p=[0.7, 0, 0.3])  
Out[104]:
array(['스타벅스 상품권 5만원'], dtype='<U12')

퀴즈 : 로또 번호 생성기

  • 1~46 에서 3개의 번호가 표시된다.
  • 중복을 허용하지 않는다.
23 45 1 

35 23 2
In [105]:
arr = np.arange(1,47)
arr
Out[105]:
array([ 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, 28, 29, 30, 31, 32, 33, 34,
       35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46])
In [126]:
np.random.choice(arr, size=3, replace=False)
Out[126]:
array([13,  7, 29])

np.random.shuffle()

  • 데이터의 순서 바꾸기¶
  • np.random.shuffle(집합형자료)
In [402]:
myList = [10, 30, 100, 5, 33, 99, 2]
myList
Out[402]:
[10, 30, 100, 5, 33, 99, 2]
In [403]:
np.random.shuffle(myList)
myList
Out[403]:
[33, 5, 100, 2, 99, 30, 10]
In [404]:
np.random.shuffle(myList)
myList
Out[404]:
[99, 100, 10, 30, 2, 5, 33]

넘파이 배열의 소숫점 표시

  • np.set_printoptions(precision=소숫점자리수)
  • 기본값이 소숫점 8자리. 9자리에서 반올림
In [127]:
arr1 = np.array([3.45657, 4.560990234909, 5.0239329392])
arr1
Out[127]:
array([3.45657   , 4.56099023, 5.02393294])
In [128]:
# 기본 소숫점 표시를 3번째자리에서 반올림 형태로 변경 
np.set_printoptions(precision=2)
In [129]:
arr1 = np.array([3.45657, 4.560990234909, 5.0239329392])
arr1
Out[129]:
array([3.46, 4.56, 5.02])
In [130]:
# 기본값으로 다시 변경 
np.set_printoptions(precision=8)
In [131]:
arr1 = np.array([3.45657, 4.560990234909, 5.0239329392])
arr1
Out[131]:
array([3.45657   , 4.56099023, 5.02393294])
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
반응형