분류 전체보기 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를 정의할..