전체 글 62

함수

함수 함수는 parameter, return, operation으로 구성됨 (개념은 python과 차이 없음) parameter로 전달되는 값은 argument parameter와 return은 있을 수도 없을 수도 있음 함수 또한 사용되기 전에 선언되어야 함. 형식 return되는 type을 function_name 앞에 명시(void는 return되는 값이나 parameter가 없을 때 사용) parameter들도 각각 type을 명시해줘야 함 tip) Argument와 parameter 구분해 이해해야한다. parameter는 함수 밖에서 전달 받을 어떤 변수의 자리를 만들어 놓은 것. operation은 parameter들로 표현되어 수행될 프로그램이 작성됨. 이 때 operation 내에 사용된..

C 연산자

연산자 사칙연산 나누기를 제외하고 python과 같다. 연산자 의미 + 더하기 - 빼기 * 곱하기 / 나누기 - 정수끼리 나눌 시 몫 반환 % 나누기 - 나머지 반환, 피연산자는 반드시 정수형 대입 연산자(=) 대입할 때 좌변과 우변의 타입이 다를 경우 좌변의 변수 타입에 맞춰 대입 복합 대입 연산자 자기 자신에 어떤 연산을 할 때 연산자를 줄여 쓸 수 있음 복합 연산자 의미 a += n a = a + n a -= n a = a - n a *= n a = a * n a /= n a = a / n a %= n a = a % n 다른 타입 간 연산 컴파일러는 기본형 타입 간 연산시 서로 다른 타입이 맞지 않으면 자동으로 타입을 바꿈(implicit type conversion) 변환 과정을 정확히 모르면 경..

printf와 scanf

printf와 scanf는 string 형태로 format을 정하고 형식 지정자로 값을 대입하거나 입력받을 수 있도록 만든 표준 입출력 함수 표준 라이브러리 함수 #include 처럼 #include로 미리 작성된 프로그램을 불러옴 .h, .c, .txt 모두 사용할 수 있고 #include로 불러온 위치에 해당 내용이 실행됨 와 " "로 불러올 수 있는데, 는 표준 라이브러리에서 파일을 찾고, " "는 먼저 작업 폴더에서 찾고 없다면 표준 라이브러리에서 찾음 printf C의 표준 출력 함수 printf("출력할 서식", 변수1,..., 변수n) 형태로 사용할 수 있고 출력할 서식에 형식 지정자(format specifier)를 포함시켜 변수를 함께 출력할 수 있음 변수를 하나도 포함시키지 ..

C 언어에서 수 체계와 변수

C언어의 수 체계 C언어에서 2진수로 데이터를 저장. 최소 단위는 1bit 1bit는 오직 2가지만 표현할 수 있기 때문에 이를 8개나 16개씩 묶어 8진수나 16진수로 표현하는 것이 편리 10진법으로 10~15는 16진법에서 A~F로 표기 표현하고자 하는 값 앞에 접두사를 붙이는 방식으로 진법을 표시한다. 8진법 : 0 (숫자 영) 16진법 : 0x (숫자 영과 알파벳 엑스. x의 대소문자는 구분하지 않는다) example) C 프로그램에서 10진수 90을 16진수로 표현하면 0x5a, 8진수로 표현하면 0132 prinf 함수에서 format 지시어 옵션을 사용해 진법 변환을 할 수 있다. %o는 8진수를, %d는 10진수를, %x는 16진수를 지시 (line5) 지시어에 #을 삽입하면 진수를 나타내..

numpy array broadcasting

Numpy를 활용한 배열 연산 numpy는 python에서 텐서 연산을 효율적으로 수행할 수 있도록 해주는 라이브러리 수학적으로 벡터의 요소별 연산을 할 때, 텐서의 shape이 일치하지 않으면 계산할 수 없음 예를 들어, $x = [1, 2, 3]$인 3차원 벡터의 각 요소에 1씩 더해주려면 x + np.array([1,1,1])처럼 계산 하지만 numpy에서는 배열의 형태가 달라도 의도한 계산을 할 수 있는 broadcasting을 지원하기 때문에 x + 1로 같은 결과를 얻음 2차원 배열에서도 다음과 같이 broadcasting이 적용된 연산을 할 수 있음. Broadcasting rule 위의 예시에서는 낮은 차원의 예시이기 때문에 쉽게 이해하고 적용할 수 있지만, 차원이 높아짐에 따라 규칙을 명..

short-circuit evaluation

short-circuit Evaluation and나 or로 boolean 값을 다룰 때 연산을 최소화하기 위한 방법and and는 두 값이 모두 참일때만 True를 반환하고 나머지 경우에는 False를 반환 (A and B)에서 A가 False $\to$ A가 거짓이면 B 연산 안함 A가 True면 B의 참, 거짓이 (A and B)의 참거짓을 결정 $\to$ B를 반환 or or은 두 값 모두 거짓일때만 False를 반환하고 나머지 경우에는 True를 반환 (A or B)는 둘 중 하나만 참이면 True $\to$ A가 참이면 B 연산 안함 마찬가지로 A가 False이면 B의 참, 거짓이 (A or B)의 참거짓을 결정 $\to$ B를 반환 Bitwise Operators boolean 연산의 두 o..

jupyter module autoreload

jupyter notebook의 module load jupyter lab이나 notebook을 사용할 때 가장 불편했던 점이 어느 정도 프로젝트가 진행 된 후 자주 사용되는 함수들을 모듈화 시켜 .py 파일로 저장했을 때, py 파일을 수정했을 때 kernel을 재시작해야 반영이 되는 점이었다. 노트북에 두 줄의 코드를 입력하는 것으로 커널을 매번 재시작하지 않고 모듈의 수정사항을 반영할 수 있다. Reference [1] ipython autoreload document

*args와 **kwargs 활용하기

open source 라이브러리를 사용하며 문서를 찾다 보면 *args와 **kwargs가 사용되는 것을 볼 수 있다. 두 키워드는 해당 함수에 여분의 argument를 전달해 줄 수 있는 방법이다. *는 필요한 parameter 이외에 추가로 전달되는 argument를 tuple로 전달하고, **는 dictionary 형태로 전달한다. 여기에서 중요한 부분은 *와 **로, *나 **뒤에는 args, kwargs 대신 어떤 단어를 사용해도 좋다. *와 **를 활용해 함수를 정의하는 것 뿐만 아니라 argument를 tuple이나 dictionary 형태로 함수에 전달할 수 있다. dictionary 형태로 argument를 전달하는 방식은 머신러닝 모델을 정의할 때 많이 사용하게 된다.

matplotlib 테마 설정하기

Matplotlib style matplotlib을 기본의 기본 설정을 사용하면 다소 투박한 배경에 그래프가 그려진다. 우연히 python에서 ggplot을 사용해 그린 그래프를 보고 아름답다고 생각을 해 다른 라이브러리를 공부해보려고 생각했다. 필요한 기능의 대부분을 matplotlib으로 해결을 할 수 있다보니 다른 라이브러리를 공부하는 것을 계속 미루던 참에 matplotlib의 style을 바꿀 수 있는 방법을 발견했다. Seaborn style 사용하기 matplotlib 외에 처음 알게 된 라이브러리는 seaborn이다. seaborn은 matplotlib에 기반해 좀 더 아름답고 효과적으로 데이터 시각화를 도와주는 라이브러리이다. seaborn은 5가지 기본 테마를 제공한다. sns.set_..

lambda 함수

이 글은 슬기로운 파이썬 트릭의 내용을 정리한 글입니다. 3.2 람다는 단일 표현식 함수다 lambda 키워드는 익명 함수를 선언하는 방법이다. 익명 함수라는 말은 함수를 def function_name(parameters): 와 같은 방식으로 선언한 경우 함수 객체를 function_name에 바인딩해 사용하는데 그럴 필요가 없다는 말이다. 아래의 add 함수와 add_lambda는 같은 역할을 한다. 람다 함수를 사용하게 되면 코드 def로 함수를 선언하는 몇 줄을 줄일 수 있지만 과도하게 사용하면 코드의 유지보수 측면에서 악영향을 줄 수 있다. 사용의 간결함과 유지보수의 악영향을 주지 않는 적정선에서 사용하는 것이 좋다. 람다 함수를 사용하기 좋은 경우 list를 sorting할 때 key를 정의할..