https://www.python.org/static/community_logos/python-logo-inkscape.svg

 

 

 * set은 순서를 보장하지 않는다. 

 

 Set(집합)의 원소는 중복되지 않음! 

  → 중복 제거를 쉽게 할 수 있다.

set1 = set([1, 2, 2, 3, 3, 3, 4, 4, 4, 4])
print(set1) # {1, 2, 3, 4}

 

 

 

 1) 원소 추가 (add) - 하나의 값만 추가 가능 

set1 = set([1, 2])
set1.add(3)
set1.add('abc')
set1.add(('a', 'b', 'c'))
print(set1) # {'abc', 1, 2, 3, ('a', 'b', 'c')}

 

 2) 여러 개의 원소 추가 (update) - [리스트]나 {set}으로 추가 

* 중복된 값이면 중복이 제거됨

set1 = {1, 2, 3}
set1.update([2])
print(set1) # {1, 2, 3}
set1.update([4, 5, 6])
print(set1) # {1, 2, 3, 4, 5, 6}
set1.update({7, 8})
print(set1) # {1, 2, 3, 4, 5, 6, 7, 8}
set1.update({3, 3, 3, 'a'})
print(set1) # {1, 2, 3, 4, 5, 6, 7, 8, 'a'}

 

 3) 원소 제거 (remove, discard) 

* 차이: set에 원소가 없는 경우 KeyError 발생 여부

set1 = {1, 2, 3}
set1.remove(2)
print(set1) # {1, 3}
set1.remove(2) # KeyError
set1.discard(2)
print(set1) # {1, 3}

 

 4) 연산자 (합집합 |, 교집합 &, 차집합 -, 대칭차집합 ^) 

* 대칭차집합 = 합집합 - 교집합

a = {1, 2, 3}
b = {3, 4, 5}
print(a|b) # {1, 2, 3, 4, 5}
print(a&b) # {3}
print(a-b) # {1, 2}
print(a^b) # {1, 2, 4, 5}

a.union(b), a.intersection(b), a.difference(b), a.symmetric_difference(b)로도 연산 가능!

 

 

 

참고: aigong.tistory.com/30

 

Python 내장 함수 : set 함수 사용하기 - 아이공

Python 내장 함수 : set 함수 사용하기 - 아이공 설명에 앞서 정제된 표현이 되어있는 아래 2개의 사이트를 방문하시는 것을 추천드립니다. 특히 1번이 아주 자세히 설명되어 있습니다. 최대한 친절

aigong.tistory.com

 

'Python' 카테고리의 다른 글

[Python] python 내장 함수 filter  (0) 2021.01.19
[Python] python split(문자열 분리하기)  (0) 2021.01.19

[백준/Python] Q10941. BASE16 디코딩

 

 문제 

BASE16으로 인코딩한 문자열 S가 주어졌을 때, S를 출력하는 프로그램을 작성하시오.

 입력 

첫째 줄에 문자열 S를 BASE16으로 인코딩한 결과가 주어진다. S는 알파벳 대문자와 소문자, 그리고 숫자로만 이루어져 있으며, 길이는 최대 50이다.

 출력 

첫째 줄에 문자열 S를 출력한다.

 

 

 

  관련 개념  

 

- BASE64 모듈: 바이너리 데이터를 인쇄 가능한 ASCII 문자로 인코딩하고

이러한 인코딩을 다시 바이너리 데이터로 디코딩하는 함수를 제공

(Base16, Base32, Base64, Base85 인코딩에 대한 인코딩, 디코딩 함수 제공)

 

 

 base64.b16decode(s, casefold=False) 

Base16으로 인코딩된 바이트열류 객체나 ASCII 문자열 s를 디코딩하고 디코딩된 bytes를 반환

casefold로 소문자 알파벳을 입력으로 사용할 수 있는지 지정(기본값은 false)

 

docs.python.org/ko/3.7/library/base64.html

 

base64 — Base16, Base32, Base64, Base85 데이터 인코딩 — Python 3.7.9 문서

base64 — Base16, Base32, Base64, Base85 데이터 인코딩 소스 코드: Lib/base64.py 이 모듈은 바이너리 데이터를 인쇄 가능한 ASCII 문자로 인코딩하고 이러한 인코딩을 다시 바이너리 데이터로 디코딩하는 함

docs.python.org

 

 

 

[백준/C++] Q15552. 빠른 A+B

 

 문제 

본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다.

C++을 사용하고 있고 cin/cout을 사용하고자 한다면, cin.tie(NULL)과 sync_with_stdio(false)를 둘 다 적용해 주고, endl 대신 개행문자(\n)를 쓰자. 단, 이렇게 하면 더 이상 scanf/printf/puts/getchar/putchar 등 C의 입출력 방식을 사용하면 안 된다.

Java를 사용하고 있다면, Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용할 수 있다. BufferedWriter.flush는 맨 마지막에 한 번만 하면 된다.

Python을 사용하고 있다면, input 대신 sys.stdin.readline을 사용할 수 있다. 단, 이때는 맨 끝의 개행문자까지 같이 입력받기 때문에 문자열을 저장하고 싶을 경우 .rstrip()을 추가로 해 주는 것이 좋다.

또한 입력과 출력 스트림은 별개이므로, 테스트케이스를 전부 입력받아서 저장한 뒤 전부 출력할 필요는 없다. 테스트케이스를 하나 받은 뒤 하나 출력해도 된다.


 입력 

첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.

 출력 

각 테스트케이스마다 A+B를 한 줄에 하나씩 순서대로 출력한다.

 

  관련 개념  

https://algospot.com/forum/read/2496/

 

cin과 scanf의 성능 차이가 꽤 많이 나기 때문에

cin을 사용했을 때

시간 초과나 런타임 에러가 많이 뜨게 된다.

 

cin,cout 사용 전

 ios_base::sync_with_stdio(false); 

 cin.tie(NULL); / cout.tie(NULL); 

를 추가하면 입출력 속도가 단축된다.

 

 

 ios_base::sync_with_stdio(false) 

 

sync_with_stdio란 C++ 스트림과 C 스트림을 동기화시킨다는 의미로,

동기화된다면 C와 C++의 입출력 연산을 혼합하여 사용할 수 있다.

 

동기화하지 않았을 경우 혼합하여 사용한다면 입출력 순서가 보장되지 않지만

입출력 연산 속도를 단축시킬 수 있다.

 

 

 cin.tie(NULL) / cout.tie(NULL) 

 

기본적으로 cin과 cout은 스트림 버퍼를 공유하고 있기 때문에

입출력 연산 시 각각의 버퍼를 모두 확인하는 과정을 거친다.

 

NULL값을 주면 cin 또는 cout 실행 시 입출력 스트림 버퍼를 모두

확인하는 과정을 거치지 않으므로 입출력 연산 속도를 단축시킬 수 있다.

 

 

 

[백준/C++] Q9610. 사분면

 

 문제 

2차원 좌표 상의 여러 점의 좌표 (x,y)가 주어졌을 때, 각 사분면과 축에 점이 몇 개 있는지 구하는 프로그램을 작성하시오.

https://www.acmicpc.net/upload/images/quad.png

 입력 

첫째 줄에 점의 개수 n (1 ≤ n ≤ 1000)이 주어진다. 다음 n개 줄에는 점의 좌표 (xi, yi)가 주어진다. (-106 ≤ xi, yi ≤ 106)

 출력 

각 사분면과 축에 점이 몇 개 있는지를 예제 출력과 같은 형식으로 출력한다.

 

각 사분면마다 x,y좌표의 범위를 기준으로 조건을 나누어

어느 사분면에 있는지 판단하도록 하였다.

 

  관련 개념  

scanf와 scanf_s

- scanf: C의 표준 입력 함수

- scanf_s: scanf의 보안 문제를 보완한 입력 함수

 

scanf는 버퍼 오버플로우에 취약하다.

버퍼 오버플로우가 일어나면 프로그램이 중지되기 때문에

해커들이 이를 이용했다고.. 

 

그래서 scanf_s는 세 번째 인자로 버퍼 메모리의 크기를 지정해줌으로써

버퍼 오버플로우가 발생하지 않게 한다.

 

ex. 변수 입력

int x;

scanf_s("%d", &x, 1);

: 변수를 1개만 입력 받을 때는 자료형이 달라도 버퍼 메모리의 크기는 1로 지정해주면 된다.

 

ex. 배열 입력

int arr[10];

scanf_s("%d", arr, 10);: 크기가 10인 배열이므로 버퍼 메모리의 크기는 10으로 지정해주면 된다.

 

 

단, scanf 사용 시에는

 #pragma warning(disable:4996) 

을 추가해주면 scanf_s를 사용하지 않아 발생하는 오류를 무시할 수 있다.

 

또는

 #define _CRT_SECURE_NO_WARNINGS 

를 추가해주면 된다.

 

[백준/C++] Q6679. 싱기한 네자리 숫자

 

 문제 

싱기한 네자리 숫자란, [1000,9999]인 10진수 숫자중에서,  다음의 조건을 만족하는 숫자를 말한다.
  • 숫자를 10진수, 12진수, 16진수로 나타낸 다음, 각각의 숫자에 대해, 각 숫자의 자리수를 더했을 때, 세 값이 모두 같아야 한다.

여러분은 싱기한 네자리 숫자를 모두 출력해야 한다.

 입력 

입력은 주어지지 않는다.

 출력 

싱기한 네자리 숫자를 오름차순으로 한줄에 하나씩 출력한다.

 

숫자의 10진수, 12진수, 16진수 자리수의 합을 나타내는 sum 변수를 3개 두어

마지막에 세 숫자가 같은지 확인하는 방법을 사용하였다.

 

  관련 개념  

- 진법: 기수법 중 하나, 임의의 숫자를 이용하여 가중치를 두어 표현하는 방법.

- 진수: 진법으로 나타낸 수. 숫자의 우측 하단에 조그맣게 (진법) 을 표시한다.

 

10진수

통상 사용하는 수로, 1~9를 이용해 숫자를 표기함

ex. 999 = 9x10^2 + 9x10^1 + 9x10^0

 

12진수

1~9, A~C를 이용해 숫자를 표기함

ex. 9A9(12) = 9x12^2 + 10x12^1 + 9x12^0

 

16진수

1~9, A~F를 이용해 숫자를 표기함

ex. 9E9(16) = 9x16^2 + 14x16^1 + 9x16^0

 

 

  진수 변환 

모든 진수 변환은 10진수를 거쳐서 해야 한다.

ex. 2진수를 16진수로 변환: 2진수 → 10진수 → 16진수

 

10101(2) = 1x2^4 + 0x2^3 + + 1x2^2 + 0x2^1 + 1x2^0 = 21

21 = 15(16) = 1x16^1 + 5x16^0

이므로 10101(2) = 15(16)

 

 

 

'Algorithm' 카테고리의 다른 글

[백준/Python] Q20920. 영단어 암기는 괴로워  (0) 2021.02.23
[백준/Python] Q10941. BASE16 디코딩  (0) 2020.11.23
[백준/C++] Q15552. 빠른 A+B  (0) 2020.11.23
[백준/C] Q9610. 사분면  (0) 2020.11.23

 

Teachable Machine 

https://teachablemachine.withgoogle.com/train

 

Teachable Machine

Train a computer to recognize your own images, sounds, & poses. A fast, easy way to create machine learning models for your sites, apps, and more – no expertise or coding required.

teachablemachine.withgoogle.com

 

 

Teachable Machine을 통해 쉽게 머신 러닝이 무엇인가를 이해할 수 있다.

현재에는 사진, 음성, 포즈로 학습이 가능하다.

 

 

 

 Teachable Machine 사용법 

 

Image Project로 예를 들면,

 

크게 Class, Training, Preview로 나뉜다.

 

 

 1. Class 

여기서 Class란,

비슷한 속성을 가진 데이터의 집합을 말한다.

 

안경을 낀 사람과 그렇지 않은 사람을 예로 들었을 때

Class1에 안경을 낀 사람의 사진을 업로드하였다면

Class2에는 안경을 끼지 않은 사람의 사진을 업로드하면 된다.

 

클래스의 이름은 우측의 연필 아이콘을 이용하여 수정이 가능하며

새로운 클래스를 추가할 수도 있다.

 

 

 사진 업로드하기 

웹캠으로 직접 찍고 싶다면 왼쪽의 'Webcam' 아이콘을,

기존의 사진을 올리고 싶다면 오른쪽의 'Upload' 아이콘을 눌러

사진을 업로드한다.

 

더보기 아이콘을 누르면

클래스 삭제, 클래스 비활성화, 사진 모두 삭제, 사진 다운로드, 드라이브에 사진 저장을 할 수 있다.

 

 

 

 2. Training 

사진 업로드를 완료하면 Train Model 버튼이 활성화되는데,

말 그대로 컴퓨터에게 학습을 시키는 과정이다.

 

'Advanced'를 누르면 여러 가지 옵션이 나온다.

 

 Epochs 

전체 데이터 셋에 대해 forward pass와 backward pass 과정을 거치는 학습의 수.

즉 50번의 Epoch는 전체 데이터 셋에 대해 50번의 학습을 완료한 것이다.

 

Epoch값을 적절하게 설정해야

underfitting(epoch값이 너무 작을 때 발생) / overfitting(epoch값이 너무 클 때 발생) 을

피할 수 있다.

 

참고: https://m.blog.naver.com/qbxlvnf11/221449297033

 

 

 Batch Size (+ Iteration) 

Mini-Batch의 크기.

전체 데이터 셋을 batch size 크기의 Mini-Batch로 나누어 학습한다.

batch size가 5라면 5개의 샘플 데이터마다 가중치가 갱신된다.

 

Iteration은 1번의 Epoch를 위해 몇 회의 가중치 갱신이 일어났는가를 의미한다.

즉, Epoch를 몇 회로 나누어 실행했는가.

 

예를 들어

전체 데이터 셋의 크기가 100이고 Batch size가 20이라면

Mini-Batch의 크기는 20,

20개의 데이터에 대해 가중치 갱신이 일어나므로

Iteration의 총 횟수는 100/20 = 5회.

1 Epoch = 5 Iteration.

 

batch size가 클수록 학습이 빠르지만

컴퓨터의 메모리 문제 때문에 나누어 학습하는 것이다.

 

 

 Learning Rate 

반복 학습 시 Gradient Descent라는 학습 방법을 사용하는데,

이 알고리즘의 매개변수가 Learning Rate이다.

이는 각 반복에서 step의 크기를 결정한다.

step과 iteration의 차이가 무엇인가 찾아보았는데 같은 의미라고 봐도 무방할 것 같다.

위의 예에서와 같이 batch size가 20이고 5회의 step을 처리했다면

전체 데이터 셋의 크기는 100이 된다.

 

https://mc.ai/an-introduction-to-gradient-descent-2/

위 그래프에서 볼 수 있듯이

step이 클수록 learning rate가 큰 것이고

step이 작을수록 learning rate가 작은 것이다.

 

머신 러닝 모델이 학습하는 속도를 의미한다고 봐도 될듯.

 

 

모든 옵션을 정하고

옵션은 자동으로 입력되긴 한다

Train Model 버튼을 누르면

학습이 진행된다.

 

 

 

 3. Preview 

학습 결과를 확인할 수 있는 단계이다.

Export Model 버튼을 누르면 페이지 외부로 export 할 수 있다.

 

데이터 업로드와 버튼 하나 누르는 것만으로도

프로젝트에 사용할 수 있으니 매우 편할듯.

 

적은 양의 데이터로도 어느 정도의 결과가 나오는 게 신기함!

 

 

-

'Machine Learning' 카테고리의 다른 글

[Machine Learning] 머신 러닝의 간단한 개념  (0) 2020.08.20
Machine learning(ML) is the study of computer algorithms that improve automatically through experience.
Machine learning algorithms build a mathematical model based on sample data, known as "training data", in order to make predictions or decisions without being explicitly programmed to do so.
Machine learning is closely related to computational statistics, which focuses on making predictions using computers.

Machine Learning - https://en.wikipedia.org/wiki/Machine_learning

 

Machine learning - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Scientific study of algorithms and statistical models that computer systems use to perform tasks without explicit instructions Machine learning (ML) is the study of computer algorithms

en.wikipedia.org

 

 

 머신 러닝? 

key: 판단, 학습, 모델. 

 

 

 

 

 판단 

머신 러닝의 목적. 기계에게 요구하고자 하는 능력.

 

 학습 

기계 스스로 판단을 할 수 있도록 하는 기준을 만드는 과정.

 

 모델 

기계가 판단할 수 있게 하는 기준. 

 

 

 

즉, 머신 러닝이란

기계를 수많은 데이터로 '학습'시켜

추측을 통해 스스로 '판단'할 수 있도록 하는 '모델'을 만드는 기술!

 

이는 보다 더 빠르고 쉽게 결정할 수 있게 한다.

 

학습량이 많고 학습이 잘 되어야 더 정확한 모델을 만들 수 있으며

모델이 좋아야 더 정확하게 추측할 수 있는 것은 당연하다.

 

 

 

-

+ Recent posts