np.random.rand()
: 표준 정규 분포(Standard normal distribution)로부터 샘플링(Sampling)된 난수를 반환한다.

 

* 난수란? 무작위로 만들어진 수열
* 표준 정규 분포란? 평균이 0이고, 표준 편차가 1인 정규분포 # N(0,1)

 

1) 인자가 1개일 때

np.random.rand(arg1)
: 1 x arg1 ndarray 반환

import numpy as np
print(np.random.rand(4))
np.random.rand(4).shape #(4,)
# [0.15362765 0.54915201 0.38309081 0.0309396 ]

 

2) 인자가 2개일 때

np.random.rand(arg1, arg2)
: arg1(행) x arg2(열) ndarray 반환

print(np.random.rand(4,3))
np.random.rand(4,3).shape #(4,3)
[[0.01304044 0.9695794  0.56967309]
 [0.70221571 0.1958122  0.08068373]
 [0.12818572 0.78272244 0.8335255 ]
 [0.11862156 0.14117875 0.35389374]]

 

3) 인자가 3개일 때


np.random.rand(arg1, arg2, arg3)
: arg1(개수) x arg2(행) x arg3(열) ndarray 반환

print(np.random.rand(4,3,1))
np.random.rand(4,3,1).shape #(4,3,1)
[[[0.60756663]
  [0.2319746 ]
  [0.11850198]]

 [[0.19399992]
  [0.27819437]
  [0.57692272]]

 [[0.61117672]
  [0.10044186]
  [0.23222601]]

 [[0.53610835]
  [0.94366013]
  [0.81449481]]]

 

print(np.random.rand(4,3,2))
np.random.rand(4,3,2).shape #(4,3,2)
[[[0.714514   0.38243509]
  [0.35858369 0.16297643]
  [0.95954249 0.55242839]]

 [[0.75944037 0.14042201]
  [0.3630711  0.66250145]
  [0.83499042 0.13780355]]

 [[0.77376779 0.34112986]
  [0.65516851 0.27008747]
  [0.54465844 0.64405539]]

 [[0.06953998 0.37572186]
  [0.3485405  0.23851377]
  [0.71324777 0.29496845]]]

 

print(np.random.rand(4,2,4))
np.random.rand(4,2,4).shape #(4,2,4)
[[[0.75432325 0.7039253  0.08521213 0.11480493]
  [0.31270955 0.31088799 0.72616086 0.06338152]]

 [[0.0716085  0.73421626 0.69906589 0.12805086]
  [0.47689292 0.00877446 0.86849906 0.04053276]]

 [[0.55914611 0.44344352 0.39613513 0.27319254]
  [0.12797766 0.86379005 0.30602653 0.96750661]]

 [[0.63060983 0.02431035 0.86995266 0.23224002]
  [0.29700202 0.64081752 0.19368442 0.0118656 ]]]

 

 

 

 

 

'ML&AI > 관련 python, lib 문법' 카테고리의 다른 글

Ellipsis 객체, '...' in Python  (0) 2021.01.27
numpy.ndarray.astype  (0) 2021.01.27
np.linspace()  (0) 2021.01.27

해당 문제와 모범답안은 아래 포스트를 확인해주세요
masso.tistory.com/61?category=891816

 

[4일차] 이.코.테.다! Ch3 그리디 greedy

Ch3. 그리디 greedy 1. 당장 좋은 것만 선택하는 그리디 - 현재 상황에서 당장 좋은 것만을 골라 현재의 선택이 나중에 미칠 영향은 고려하지 않는 방법 - 보통 코딩 테스트에서 출제되는 유형은 창

masso.tistory.com

문제 및 code

problem1. 거스름돈

def problem1(): # 거스름돈
  # 입력: 1260, 답:6 -> 500*2 + 100*2 + 50*1 + 10*1 
  coins = [500, 100, 50, 10]
  n = int(input("problem1: "))
  cnt = 0

  for coin in coins:
    cnt += n // coin
    n -= coin * (n // coin) # n %= coin

  print(cnt) 

모범 답안과의 비교>
- 파이썬에서 //: 몫을 반환하는 연산자. %: 나머지를 반환하는 연산자임을 상기시키자

- n을 남은 금액으로 갱신할 때 coin 개수와 coin 가격을 곱해 빼는 방법을 사용했는데, 나머지 연산자를 사용해

n %= coin으로 작성했다면 더 간결하고 빠른 코드였을 것이다.

 

problem2. 큰 수의 법칙

def problem2(): # 큰 수의 법칙
  # 5 8 3
  # 2 4 5 4 6
  # 답: 46 -> 6*3 + 5*1 + 6*3 + 5*1 
  # 5 8 5
  # 2 4 5 4 6
  # 답:47 -> 6*5 + 5*1 + 6*2
  n, m, k = map(int,input("problem2: ").split())
  arr = list(map(int,input().split()))

  arr.sort(reverse=True)
  sum = 0
  while m > 0:
    if m > k:
      sum += arr[0]*k
      m -= k
    else:
      sum += arr[0]*m
      m = 0

    if m >= 1:
      sum += arr[1]
      m -=1

  print(sum)

모범 답안과의 비교>

- list를 어떻게 정렬하냐에 따라 다를 수 있는데, 모범 답안에서는 오름차순으로 정렬하여 [n-1],[n-2] 값으로 제일 큰 값과 그 다음으로 큰 값을 구하였다.

- 반복되는 수열의 길이는 (K+1)이고 M을 (K+1)로 나눈 몫이 수열이 반복되는 횟수가 된다.
  여기에 (K+1)*M은 first가 반복하는 횟수가 되고, M이 (K+1)로 나누어 떨어지지 않는 것을 고려했을 때,
  '가장 큰 수가 더해지는 횟수는 int(M/(K+1)) * K + M%(K+1)'

  따라서, 더한 값의 결과는 first * 구한 횟수 + second * (m - 구한 횟수)가 된다.

 

problem3. 숫자 카드 게임

  # 3 3
  # 3 1 2
  # 4 1 4
  # 2 2 2
  # 답: 2
  # 2 4
  # 7 3 1 8
  # 3 3 3 4
  # 답: 3
  n, m = map(int, input("problem3: ").split())
  cards = [list(map(int, input().split())) for _ in range(n)]
  # [[3, 1, 2], [4, 1, 4], [2, 2, 2]]
  # [[7, 3, 1, 8], [3, 3, 3, 4]]

  for i in range(n):
    cards[i].sort()
  cards.sort(reverse=True)
  print(cards[0][0])

 

모범 답안과의 비교>

- 행을 입력받을 때마다 해당 행의 min값을 찾고, 찾은 min값을 이전 min값과 비교하면서 더 큰 min값으로 result 변수를 갱신하는데 나는 그냥 sort를 박아버렸다지...?!

 

problem4. 1이 될 때까지

def problem4():  # 1이 될 때까지
  # 25 5
  # 답:5
  n, k = map(int, input("problem4: ").split())
  count = n % k + n // k
  print(count)

 

모범 답안과의 비교>

- n을 k로 나누고, 1을 빼고 나서 또 다시 k로 나눌 수 있는 경우가 생길 수 있는데, 빨리 풀고 싶은 마음에 그 경우를 고려하지 못해서 정말 간단한 코드가 나왔다...!- k로 나눌 수 있는 만큼 나누고
  1) n<k 라면 그만큼 1을 빼면 되기 때문에 break를 한다.
  2) n>=k 라면 한 번 k를 더 나누고 이에 맞게 갱신하고 반복한다!

 

main 함수

def __main__():
  problem1()
  problem2()
  problem3()
  problem4()

__main__()

 

B반 2조 김은율, 민경민, 박진형 교육생들이 함꼐 도와주셨습니다!!

 

1. 우분투 버전 확인 -> Ubuntu 18.04 기준
    $ sudo cat /etc/issue

    참고) cuda 버전 체크   $ nvcc --version

 

2. 가상환경 만들기

    $ conda create -n (원하는 이름) python=3.6

3. 가상환경으로 로그인

    $ conda activate tsf_gpu & notebook 설치
    $ pip install notebook

4. nvidia driver가 설치되어있는지 안되어있는지 확인하기
    $ nividia-smi

driver가 설치되어 있다면 잘 나옵니다!

     4-1. nvidia driver 없는 경우 설치
          www.nvidia.co.kr/Download/index.aspx?lang=kr

 

NVIDIA 드라이버 다운로드

 

www.nvidia.co.kr

     4-2. nvidia driver 있는 경우 버전 확인

5. CUDA 라이브러리 설치

 

 

 

   파일 다운로드하기

   - dev 파일을 다운받은 다운로드 폴더에 들어가서 아래 명령어 실행

 

4. cuDNN 설치하기
   cuda 버전에 맞는 DNN 설치 (7.XX 추천)

회원가입은 해야합니당!
클릭 후 하단을 보세요!
다운로드

(만약에 안된다면 3가지 파일을 다 다운받아 보세요 - 버전 맞추는 센스 잊지 마세요!)

 

 

5. tensorflow 2 설치하기

    $ conda install tensorflow-gpu==2.0
        // sudo pip install 했다가 에러떠서 conda로 했는데 스샷을 미리 못 찍었어요ㅠㅜ

 

6. 잘 깔렸는지 확인하기

$ python

>> import tensorflow

>> tensorflow.__version__
(다시 나올 때는 Ctrl+d 누르세요)

2.XX로 나오면 tensorflow 2가 깔린 겁니다!

 

7. jupyter notebook 실행
import tensorflow as tf

tf.__version__

from tensorflow.python.client import device_lib

device_lib.list_local_devices()

GPU 나오면 성공이래요...

1. 오전 자습

수업 시작이 11시기 때문에(B반)

조식을 먹고 8시 30분부터 자습을 했다

 

어제 들은 선형 대수 강의 3개 복습을 하고,

11시 전까지 선형 대수 인강을 들었다

 

2. 오전 이론 (1시간)

반에 반장, 학습부장, 총무, 회계, 스터디장 등등

뽑기 위해 발표하는 시간을 가진다

 

1) 자기소개

2) 좋아하는 것과 잘하는 것

3) 기여하고 싶은 것

 

나는 계획하고 구체적인 걸

좋아하고 잘하는 사람이었고

 

계획서나 보고서를 작성하면서

기업에서의 기초 역량을 쌓고 싶어서

 

학습부장을 맡기 위해

블로그나 바인더(다이어리 같은 거)를

많이 어필했다

 

 

3. 오후 이론 (1시간)

점심을 먹고 나서
총무, 스터디장 등을 뽑고

과제에 대한 안내를 해주신다

 

또 이전 기수들이 개발하신

AI 프로젝트들을 소개해주셨다

끝나고 1시간 정도 쉬는 시간이 있는데

선택 스터디 장분들을 뽑고

시간을 정하는 시간으로 보냈다

 

4. 파이썬 실습

오후 이론 이후에 1시간 정도

팀원들과 소개하고

각자 가진 역량과 하고 싶은 AI 프로젝트 등

이야기를 나누었다

 

이때가 12시...귀가.... 아직 개인 공부 시작도 못함

 

총 정리

여러분.... 2일차인데 

과제하랴... 팀과제 조사하랴...

사전강의 들으랴...

팀원들이랑 회의하랴...

오늘 배운 거 복습하랴...

그리고 전 학습부장이라 

스터디 계획서랑 활동 보고서 양식 만들고...

임원분들과 소통하고 하니까

시간이 그냥 순식간에 지나가요

 

정신줄 안 붙잡고 있으면

그냥 낙오되는거에여ㅎㅎㅎㅎ

0. 조식 및 강의장

 

1. 오전 강의

윤은영 교수님께서

점심 시간을 포함하여 5시간 정도 강연을 하셨다

 

2. 입과식

고위직 분들의 말씀 몇 마디와

이전 기수 분들의 따듯한 위로와 격려 영상을 보고

1시간 안에 끝난다

 

3. 오후 강의

A반 B반에 따라 수업 시간이 좀 다른데

나는 B반이라 1시간 반 동안 자습 후에

파이썬 이론 강의를 들을 수 있었다

 

4. 자습 시간

저녁을 먹고 나서

강의실에 돌아와 파이썬 과제 3문제를 풀고

선형 대수 강의(랭크, 랭크의 활용, 역행렬)를 들었다

 

Tip.

나는 룸메랑 조식을 1등으로 먹어서

강의실에 자리를 좋은 자리로 잡을 수 있었다

 

조교님이 입과식 이후에 자리가 고정된다고 하셨지만

다들 대부분 오전에 자리 잡은 곳에 

가방을 두고 다니기 때문에

 

본인이 좋은 자리를 선점하고 싶다면

아침에 일찍 가는 것을 추천한다

 

+ Recent posts