Skip to content
총 863개의 글이 있습니다.
OpenCV의 cv2.inpaint() 함수는 이미지에서 손상된 영역이나 제거하고 싶은 객체를 주변 픽셀 정보를 이용해 자연스럽게 채우는 기법이다. 사진에서 스크래치를 제거하거나, 워터마크를 지우거나, 불필요한 객체를 없애는 데 사용된다.
--1:403F53"cv2
dst = cv2.inpaint(src, mask, inpaintRadius, flags)result = cv2.inpaint(image, mask, 3, cv2.INPAINT_TELEA) 또는result = cv2.inpaint(image, mask, 3, cv2.INPAINT_NS)
src: 입력 이미지
mask: 복원할 영역을 표시한 마스크 (흰색 픽셀이 복원 대상)
inpaintRadius: 복원 시 참조할 주변 픽셀의 반경
flags 1. 선사 문화와 국가의 형성
선사시대
구석기
동굴이나 막집, 주먹도끼, 슴베찌르개, 이동생활, 흥수아이(충북 두루봉 동굴)
신석기
모서리가 둥근 움집(화덕 중앙), 농경, 목축, 정착생활, 이른민무늬·빗살무늬토기
청동기
계급·재산, 고인돌, 직사각형 움집(화덕 한쪽 벽), 벼농사, 반달돌칼, 비파형동검
철기
세형동검, 철제농기구, 반량전, 명도전, 붓, 널무덤, 독무덤, 중국과의 교류 활발
연맹왕국
부여
사출도, 순장, 1책12법·형사취수제(고구려와 동일), 흰옷, 우제점복, 영고(12월)
부여엉고
고구려
제가회의, 상가·고추가·대로, 패자·사자·조의, 서옥제, 산악지대(약탈), 동맹(10월)
옥저
어물·소금(고구려에 공납), 민며느리제, 가족공동무덤, futex(Fast Userspace muTEX)는 리눅스에서 제공하는 저수준 동기화 메커니즘이다. 사용자 공간에서 빠르게 락을 처리하고, 경합이 발생할 때만 커널로 진입하여 효율적인 동기화를 제공한다.
include &x3C;linux/futex.h>include &x3C;sys/syscall.h>
int futex(int *uaddr, int futex_op, int val, const struct timespec *timeout, int *uaddr2, int val3);include int futex(int *uaddr, int futex_op, int val, const struct timespec *timeout, int * 오일러 피 함수
오일러 피 함수는 1~n 범위 중 n과 서로소인 숫자의 갯수를 구하는 함수이다.
1부터 6까지의 정수 중 6과 서로소인 수는 1, 5 두 개이므로 φ(6) = 2이다.
1부터 10까지의 정수는 모두 11과 서로소이고, 11은 자신과 서로소가 아니므로, φ(11) = 10이다.
1은 자기 자신과 서로소이므로, φ(1) = 1이다.
오일러 정리
오일러 정리는, 정수 a 및 양의 정수 n이 주어졌고 a와 n이 서로소일 때 아래 식이 성립한다는 내용이다.
a^φ(n) ≡ 1 (mod n)
페르마 소정리와 유사한 논리로 증명할 수 있다.
n과 서로소인 1부터 n까지의 정수를 r₁, r₂, …, r_φ(n)이라 하자. 이들의 개수가 바로 φ(n)개이다.
a가 n과 서로소일 때, ar₁, ar 유클리드 호제법
두 정수 a를 b로 나눈 값을 아래처럼 표현하면 (a ≥ b)
a = bq + r (단, 0 ≤ r &x3C; b)
다음 정리가 성립한다.
(a, b) = (b, r)
즉, a와 b의 최대공약수는 b와 r의 최대공약수와 같다.
이 성질을 나머지가 0이 될 때까지 반복하면 마지막에 남는 0이 아닌 수가 gcd(a, b)이다.
예시
(1071, 1029)= (1029, 42)= (42, 21)= (21, 0)= 21
따라서 gcd(1071, 1029) = 21
증명
a,b ∈ Z 이고 a ≥ b 라 하자.
두 정수 a를 b로 나눈 값을 아래처럼 표현할 수 있다.
a = bq + r, 0 ≤ r &x3C; b
(a, b) = d 라고 하고, a = dα, b = dβ 라 해보
스테이블코인(Stablecoin)은 가격 안정성을 목표로 설계된 암호화폐로, 법정화폐, 상품, 또는 알고리즘을 통해 가치를 유지한다.
비트코인이나 이더리움과 같은 일반 암호화폐는 높은 변동성을 가지지만, 스테이블코인은 안정적인 가치를 제공하여 결제 수단, 가치 저장, 거래소 간 이동 등에 활용된다. 따라서 거래소 간 자금 이동 시 변동성 없이 빠르게 이전할 수 있다.
상거래 결제에 안정적으로 사용되며, 탈중앙화 금융(DeFi)에서 대출, 예금, 유동성 제공의 기초 자산으로 활용된다. 국경 간 송금에서 빠르고 저렴한 수단을 제공하고, 암호화폐 시장 변동성을 회피하기 위한 안전자산 역할도 한다.
법정화폐 담보형의 경우 실제 담보 보유 여부가 불투명할 수 있고, 각국 정부의 규제 변화에 민감하게 반 자막 파일은 영상 콘텐츠에 텍스트 정보를 동기화하여 표시하는 파일 형식이다. SRT, SBV, VTT, SMI 네 가지 주요 포맷이 널리 사용되며, 각각의 특성과 용도가 다르다.
SRT (SubRip Text)
가장 범용적으로 사용되는 자막 포맷이다. 텍스트 기반의 단순한 구조로 거의 모든 미디어 플레이어에서 지원한다.
구조: 자막 번호, 타임코드, 텍스트, 빈 줄로 구성된다
시간 형식: HH:MM:SS,mmm --HH:MM:SS,mmm
자막 번호를 통해 순서 관리가 명확하다
100:00:01,000 --00:00:04,000안녕하세요, 여러분.
200:00:04,500 --00:00:06,500오늘은 자막 파일 형식에 대해 설명한다. 00:00:04,000안녕하세요, 여러분.200:00:04 Multi-head Attention
Head는 하나의 어텐션 매커니즘을 의미, 입력 텍스트의 해석을 하나의 관점이 아닌 여러 관점에 집중
Head의 예시
문법적인 요소, 시제에 집중
Entity (사란, 장소, 물건 등)의 관계에 집중
문장 내에서 일어나는 환동에 집중
Word Rhyme(단어의 운율)의 집중
Query, Key, Value 벡터를 각각 h번 Linear projection으로 변환
Linear Projection(선형 투영)은 선형 대수학에서 나오는 개념, 여기서는 고차원의 벡터를 저차원으로 나눌 때 사용한다.
Long context prompting tips
긴 문서나 입력을 프롬프트의 상단에 배치 (지시사항, 질문, 예시보다 더)
질문을 마지막에 배치하거나, 마지막 Intel Math Kernel Library (MKL)은 고성능 수학 연산을 위한 라이브러리로, 선형대수, 푸리에 변환, 벡터 수학 등 다양한 수학 계산에 최적화된 함수들을 제공한다. Intel CPU 아키텍처에 최적화되어 있으며, 과학, 공학, 머신러닝 분야에서 널리 사용된다.
MKL은 다음과 같은 특징이 있다.
Intel 하드웨어에 최적화된 고성능 연산
멀티스레딩과 벡터화를 활용한 성능 향상
BLAS, LAPACK, FFT 등 다양한 수학 연산 함수 포함
C, C++, Fortran 등의 언어와 호환
기능
1. BLAS (Basic Linear Algebra Subprograms)
기본 선형대수 연산을 위한 함수들을 제공한다. 벡터, 행렬 연산 등을 빠르게 수행할 수 있다.
Level 1: 선형회귀 : 최소제곱법
--1:403F53"tensorflow as tf--1:403F53"matplotlib.pyplot as plt--1:403F53"numpy as np
X = [0, 0.5, 1.0, 1.5, 2.0, 2.5]Y = [0.3, 1.9, 2.4, 4.1, 6.8, 7.9]
x_mean = sum(X)/len(X)y_mean = sum(Y)/len(Y)
division = sum((y-y_mean)*(x-x_mean) for y, x in list(zip(Y,X)))divisor = sum((x-x_mean)2 for x in X)
a = division / divisorb = y_mean - a * x_mean
new_X = np.arange(0, 3, 0.05)new_Y = a * --1:403F53"numpy as np--1:403F53"tensorflow as tf
x = np.array([[0,0], [1,0], [1,1], [0,0], [0,0], [0,1]]) 바퀴, 날개y = np.array([ [1,0,0], 배 [0,1,0], 자동차 [0,0,1], 비행기 [1,0,0], [1,0,0], [0,0,1]])
model = tf.keras.Sequential()model.add(tf.keras.layers.Dense(input_dim=2, units=10, activation='relu')) input_dim : 입력값 갯수model.add(tf.keras.layers.Dense(units=5, activation='relu')) units : 출력값 CUE는 논리 프로그래밍에 기반을 둔 오픈소스 데이터 검증 언어 및 추론 엔진이다. 이 언어는 데이터 검증, 템플릿 작성, 구성 관리, 쿼리 실행, 코드 생성, 스크립팅 등 다양한 용도로 사용될 수 있다. CUE의 추론 엔진은 코드 내에서 데이터를 검증하거나 코드 생성 파이프라인의 일부로 활용될 수 있어 유연성이 높다.
JSON의 슈퍼셋이기 때문에 json과 비슷하게 사용할 수 있고, json이나 yaml로 export하는 것도 가능하다.
// json.cueone: 1two: 2
// A field using quotes."two-and-a-half": 2.5
list: [ 1, 2, 3,]
$ cue export json.cue{ "one": 1, "two": 2, "two-and-
보드판 크기를 N이라 두자.
N을 6으로 나눈 나머지가 2 또는 3이 아니라면, 1부터 N까지의 수를 (짝수 오름차순) + (홀수 오름차순)으로 나열하도록 배치하면 된다.
N을 6으로 나눈 나머지가 2이라면, 앞선 홀수 오름차순 리스트에서 1과 3의 위치를 바꾸고 5를 맨 뒤로 보낸다.
즉 (짝수 오름차순), (3, 1, 7, 9, …, 5) 꼴이 될 것이다.
N을 6으로 나눈 나머지가 3이라면, 2를 짝수 오름차순 리스트의 맨 끝으로 보내고 1, 3을
구간 업데이트(덧셈)가 있을 때 쿼리마다 구간의 gcd를 구하는 문제이다.
각 구간별 gcd를 세그먼트 트리로 저장하는 일반적인 방법으로는 시간초과가 발생한다. 구간에 수를 더하면 gcd를 다 다시 계산해야하기 때문이다.
수를 더했을 때 gcd를 모두 재계산하는 것을 막기 위해선 gcd(a, b) = gcd(a, a-b)라는 성질을 활용해야한다. 이 식을 확장하면 gcd(a, b, c, d, e) = gcd(a, |b-a|, |c-b|, |d-c|, |e-d|)라는 것을 알 수 있다.
세그먼트 트리의 각 노드에서 gcd(|b-a|, |c-b|, |d-c|, |e-d|)를 관리한다고 했을 때, b, c, d에 x만큼을 더하면 |c-b|와 const curry = f => (a, ..._) =_.length ? f(a, ..._) : (..._) =f(a, ..._);
const go1 = (a, f) =a instanceof Promise ? a.then(f) : f(a);
const go = (...args) =reduce((a, f) =f(a), args);
const pipe = (f, ...fs) =(...as) =go(f(...as), ...fs); (a, ..._) =_.length ? f(a, ..._) : (..._) =f(a, ..._);const go1 = (a, f) =a instanceof Promise ? a.then(f) : f(a);const go = (...args) =reduce((a, f) =f( 코틀린에서 아래와 같은 방식으로 컬렉션을 사용할 수 있다.
val set = hashSetOf(1, 7, 53)val list = arrayListOf(1, 7, 53)val map = hashMapOf(1 to "one", 7 to "seven", 53 to "fifty-three")
자바의 컬렉션(Set,List,Map)과 동일한 구조이기 때문에 서로 호환된다.
코틀린의 컬렉션은 자바보다 더 많은 기능을 지원한다.
fun main(args: Array&x3C;String>) { val strings = listOf("first", "second", "fourteenth") println(strings.last()) // 리스트의 마지막 원소를 가져온다. val numbers = setO Packer ( 는 HashiCorp에서 개발한 가상 머신 이미지를 만들어주는 오픈소스이다.
예를 들어서, 아마존 클라우드 AMI이미지나, 구글 클라우드 이미지를 스크립트를 이용하여 생성이 가능하다.
하나의 스크립트를 이용하여, 구글 클라우드, VMWare, 아마존 클라우드 등 여러 클라우드 환경 (가상화 환경)과 컨테이너 엔진용 이미지를 생성할 수 있다.
Chef, Puppet, Ansible과 같은 Configuration management 툴과 혼동이 될 수 있지만, Packer는 OS 이미지를 만들어주는 역할을 하고, Configuration management 툴들은 이렇게 만들어진 이미지 위에 소프트웨어를 설치하고, 이를 설정하는 상호 보완적인 역할을 하 1. 프로세스와 구조체
프로세스는 프로그램 코드를 실행하면서 생기는 모든 결과물이다.
일반적인 의미: 실행 중인 프로그램
포괄적인 의미: 사용 중인 파일, 대기 중인 시그널, 커널 내부 데이터, 프로세서 상태, 메모리 주소 공간, 실행 중인 하나 이상의 스레드 정보 등
프로세스는 fork() 호출 시 생성되고, 기능을 수행한 뒤, exit()를 호출해 종료된다. 부모 프로세스는 wait() 호출로 자식 프로세스 종료 상태를 확인할 수 있다.
스레드는 프로세스 내부에서 동작하는 객체이고, 개별적인 PC, Stack, Register(context)를 가지고 있다.
리눅스 커널은 프로세스와 스레드를 구분하지 않는다.
리눅스 커널에 대한 접근은 오직 시스템 콜과 ISR로만 가능하다.
커널
top 명령어를 사용하면 시스템의 상태를 전반적으로 가장 빠르게 파악할 수 있다. (CPU, Memory, Process)
옵션 없이 입력하면 interval 간격(기본 3초)으로 화면을 갱신하며 정보를 보여준다.
Terminal window$ top -help procps-ng 3.3.17Usage: top -hv | -bcEeHiOSs1 -d secs -n max -u|U user -p pid(s) -o field -w [cols]
Terminal windowtop - 21:22:27 up 232 days, 2:22, 3 users, load average: 0.00, 0.04, 0.05Tasks: 134 total, 1 running, 133 sleeping, 0 stopped, include &x3C;unistd.h>include &x3C;sys/mman.h>
ifdef _POSIX_MAPPED_FILESvoid * mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);int munmap(void *start, size_t length);
endifinclude ifdef _POSIX_MAPPED_FILESvoid * mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);int munmap(void *start, size_t length);endif">
mmap은 파일이나 장치를
파일: 논리적 저장 단위
파일을 정리하고 메모리에 매핑
디렉터리로 계층적 연결 (폴더와 비슷)
디렉토리란?/ 디스크에 존재하는 파일에 대한 정보를 가진 테이블
DOS, Linux, Unix 등 텍스트 기반은 디렉토리
GUI에선 폴더, 폴더에는 네트워크 설정 같은 특수 폴더가 포함됨
사용자가 생성, 수정 삭제 가능
파일 구성
비트 &x3C; 바이트 &x3C; 워드 &x3C; 필드 &x3C; 레코드 &x3C; 파일
레코드 단위 작업
Read, Write, Update, Insert, Delete, Search
파일 단위 작업
Open, Close, Copy, Destroy, Rename, List
File Descripter
열린 파일의 목록을 관리하는 테이블의 인덱스
0 또는 양수 값 Redis는 고성능 키-값 저장소로서 문자열, 리스트, 해시, 셋, 정렬된 셋 형식의 데이터를 지원하는 NoSQL이다. 데이터 저장소로 디스크가 아닌 메모리를 사용한다는 것이 특징이다.
캐시, 메시지 브로커 및 스트리밍 엔진으로도 사용되며, 문자 , 해시, 목록, 집합, 비트맵, 하이퍼로그 로그, 지리 공간 인덱스 및 스트림과 같은 아주 다양한 데이터 구조를 제공한다.
Redis에 모든 데이터를 메모리에 저장하는 빠른 DB이다. OLAP(Online Analytical Processing)는 데이터 웨어하우스, 데이터 마트 또는 기타 중앙화된 통합 데이터 저장소의 대용량 데이터를 고속으로 다차원 분석하는 소프트웨어이다.
대부분의 비즈니스 데이터에는 여러 차원, 즉 프레젠테이션, 추적 또는 분석을 위해 데이터를 분류하는 기준인 여러 범주가 있다. 예를 들어 매출 수치에는 위치(지역, 국가, 주/도, 매장), 시간(연, 월, 주, 일), 제품(의료, 남성/여성/아동, 브랜드, 유형)과 관련된 여러 차원이 있을 수 있는데, 일반적인 데이터베이스로는 2차원 데이터 밖에 저장할 수 없어 저장 성능이나 구현이 복잡할 수 있다.
OLAP는 여러 관계형 데이터 세트에서 데이터를 추출한 후 매우 빠른 처리와 분석을 위해 다차원 형식으로 재구성하여 SELECT문을 통한 작업을 하다보면 결과집합의 각 행과 행의 관계에서 다양한 연산처리를 해야할 떄가 있다. (누적합계, 누적비율, 누적등수 등)
이러한 연산처리를 할 수 있게 하는 것이 바로 윈도우 함수(Window Function)이다. 분석함수라고 불리기도 한다.
윈도우 함수의 종류
순위
함수명설명RANK지정한 기준에 따라 순위를 구하고, 동일한 순위가 있다면 건너뛰고 다음 순위로 산출한다. (1, 2, 2, 4)DENSE_RANK지정한 기준에 따라 순위를 구하고, 동일한 순위가 있다면 건너뛰지 않고 다음 순위로 산출한다. (1, 2, 2, 3)ROW_NUMBER지정한 기준에 따라 순위를 구하고, 동일 순위가 있어도 무조건 순위를 산출한다. (1, 2, 3, ,4) FineGrained와 CoarseGrained 개발
Fine-grained는 사전적으로 “결이 고운”, “미세한”이라는 의미를 가지고, Coarse-grained는 “결이 거친”, “조잡한”의 의미를 가진다. Grain은 곡식 혹은 낱알을 뜻하는데, 알갱이가 거칠고 큼직큼직헌지, 곱고 세밀한지에 따라서 Coarse와 Fine으로 나누어 표현한다고 이해할 수 있다.
Fine-Grained
하나의 작업을 작은 단위의 프로세스로 나눈 뒤, 다수의 호출을 통해, 작업 결과를 생성해내는 방식
예를 들어, Do라는 동작이 있다면 해당 함수를 First_Do(), Second_Do()로 나누어 작업 결과를 생성해냄
다양한 “Flexible System” 상에서 유용하게 쓰일 수 있음
Coarse-Grained
하나의 작업을 큰 단위의 프로세스로 나눈 뒤, “Sin