본문 바로가기

Study55

비트 연산 기본 이 글은 기본적인 비트 연산을 다룬다. L shift i 는 n을 오른쪽으로 i번 밀겠다는 의미이다. n = 0000101(2) 일 때 n >> 2는 0000001(2)이 된다. cout 2021. 5. 5.
c++에서 class의 private 멤버를 일반적이지 않은 방법으로 읽기 c++의 private 접근 지정자는 "동일한 class가 아니라서 접근하실 수 없습니다."라 말한다. "아니 내가 좀 보겠다는데 거 한 번만 봅시다~" 라 말해도 "친구(friend)가 아니라면 만날 수 없습니다"는 말만 돌아올 뿐이다. 하지만 난 같은 class도 아니고 friend도 아니다. 그렇다고 기존에 있던 class의 코드를 수정하고 싶지는 않다. 그렇다면 private 멤버를 읽을 방법이 없는가? 그렇지는 않다. 우리는 몇 가지 편법을 사용해서 private 멤버를 읽고 임의로 수정할 수 있다. 이 글에선 friend를 이용한 일반적인 방법을 한번 본 후 수많은 꼼수들 중 두 가지 방법을 소개할 것이다. Friend를 사용한 일반적인 방법 만약 내가 이미 접근하려는 class의 friend.. 2021. 4. 25.
Python에서 AhoCorasick(아호코라식) 알고리즘 구현하기 지금 캐글에 논문을 입력으로 받아 논문에서 사용된 데이터셋 이름을 찾는 대회가 진행 중이다. 만약 알고 있는 데이터셋 이름이 있다면, 논문 속에서 그 이름을 단순 문자열 매칭을 이용해서 찾아내어서 출력에 반영할 수 있을 것이다. 처음에는 Test 셋이 몇 개 없는 줄 착각하고 단순 2중 for문으로 이를 구현했었다. 그러나 숨겨진 test 셋에 문서가 8000개가 넘어서 문자열 매칭만 하였음에도 50분이 넘게 걸렸었다. 그래서 이 부분을 다중 패턴 매칭 알고리즘인 아호코라식을 사용하여서 구현하였다. 아호코라식 알고리즘은 찾아야 하는 패턴이 많을 때 단순 2중 for문에 비해 큰 시간 차이를 보인다. 또, 검색해야 하는 범위가 방대할 때, 아호코라식으로는 커피 두 잔 정도 타는 시간에 끝낼 수 있을 것들이.. 2021. 4. 17.
javascript canvas로 허접한 꺾은선 그래프 만들기 canvas에서 간단하게 꺾은선 그래프를 그려보았다. See the Pen DrawGraph by Jh Do (@kazakan) on CodePen. 가로 세로 축이 그려져있고 주어진 값에 점이 찍혀 있으며 그 점을 잇는 선들이 있는 전형적인 꺾은선 그래프이다. 이 그래프는 점 근처에 마우스를 가져다 대면 그 점이 가리키는 값을 보여준다. 그 외에는 별 기능은 없다. 코드 살펴보기 코드를 차근차근 살펴보자. // data data = [5, 3, 26, 7, 6, 3, 45, 7, 54, 3, 10, 4, 3, 20,54]; const cvs = document.getElementById("cvs"); const ctx = cvs.getContext("2d"); cvs.height = window.inn.. 2021. 4. 15.
Python 문자열(string) 그냥 한번 대충 보기 Python string 그냥 한번 대충 보기¶ 문자열에 관하여 간단하게 보는 글 문자열 생성¶ a = 'abcdefgh' b = "12345" c = """ㄱㄴㄷ ㄻㅄ ㅇㅈㅊㅋ""" print(a) print(b) print(c) abcdefgh 12345 ㄱㄴㄷ ㄻㅄ ㅇㅈㅊㅋ 문자열 요소 접근¶배열 접근하듯 하면 된다. a[0] 'a' a[4] 'e' a[-1] 'h' a[1:4] 'bcd' a[-3:] 'fgh' sentence = "hello world" for c in sentence: print(c) h e l l o w o r l d 문자열의 길이는 ?¶ len(sentence) 11 더하기 기호로 문자열 .. 2021. 4. 14.
Python에서 Glob으로 파일 혹은 폴더의 경로 불러오기 Python에서 Glob으로 파일과 폴더경로 불러오기¶ import glob 폴더 구조는 아래와 같다. data폴더와 파이썬 노트북이 하나 존재한다. data폴더엔 abc.tiff파일하나와 train,test 두개의 폴더가 있다. train,test폴더엔 tiff, json파일이 두개씩 존재한다. !ls ./ -R ./: data glob.ipynb ./data: abc.tiff testtrain ./data/test: ccc.json ccc.tiff ddd.json ddd.tiff ./data/train: aaa.json aaa.tiff bbb.json bbb.tiff 현재 폴더에 있는 폴더와 파일의 경로들을 받는다. glob.glob('./*') ['./glob.ipynb&#39.. 2021. 3. 26.
Pytorch Tensor(텐서) 만들기 Pytorch의 Tensor(텐서) 조작하기 1¶ import torch import numpy as np Tensor(텐서) 를 만드는 다양한 방법¶ empty¶주어진 크기의 아무값으로도 초기화되지 않은 텐서를 만든다. 텐서 성분의 값들은 쓰레기값들이다. torch.empty(4) tensor([ 1.6751e-37, -1.9427e-13, 1.6751e-37, -1.9427e-13]) torch.empty((4,5)) tensor([[0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00], [0.0000e+00, 0.0000e+00, 0.0000e+00, 1.4013e-45, 0.0000e+00], [0.0000e+00, 0.0000e+00, 0.0.. 2021. 3. 23.
Kaggle에서 Pytorch로 간단한 Mnist 숫자 분류기 만들기 Pytorch로 간단한 Mnist 숫자 분류기 만들기¶캐글에서 Mnist 숫자를 분류하는 연습을 여기서 할 수 있다. Kaggle에서 제공하는 데이터와 환경으로 간단하게 Mnist 숫자를 분류하는 연습을 해보자. import numpy as np import pandas as pd import matplotlib.pyplot as plt import torch import torch.nn as nn import torch.nn.functional as F from torch.utils.data import Dataset,DataLoader 사용할 경로와 epoch, 배치사이즈, learning rate를 한곳에서 쉽게 조정하여 사용할 수 있도록 하였다. class PATH: TRAIN = '/ka.. 2021. 3. 16.
Pytorch로 선형 회귀(Linear Regression) 구현하기 Pytorch로 선형회귀 구현하기¶ import numpy as np import matplotlib.pyplot as plt import torch import torch.nn as nn from torch.optim import SGD 데이터 생성¶y = 2*x + 10에서 약간의 오차를 준 데이터를 사용하였다. # y = x*2 + 10 data_x = np.random.randint(1,20,20) data_y = np.array([1*np.random.randn() + x*2 + 10 for x in data_x]) data_x = torch.FloatTensor(data_x).unsqueeze(dim=1) data_y = torch.FloatTensor(data_y).unsqueeze(dim=.. 2021. 3. 15.
C/C++서 양수 정수 나눗셈 결과의 올림 구하기 math.h의 ceil을 쓰면 간단하게 구할 수 있지만, 다르게도 한번 해보자. c = (a+b-1)/b; 확인해보자. #include int main(void){ int a[7] = {5,6,7,11,100,65,99}; int b[7] = {2,2,5,5,5,13,30}; for(int i=0;i 2021. 3. 1.