본문 바로가기

programming10

[PY] line_profiler (@profile) 구현을 하다보면 알고리즘 속도에 대한 고민을 된다. 이때 어떤 부분이 오래 걸리는지를 확인해야 하는데 직관적인 방법에 의한 고민을 할 수도 있지만 코드가 많아지게 되면 이를 찾아내기 쉽지가 않다 그럴 때 도움을 받을 수 있는 것이 프로파일링 (profiling)이다. 프로파일링이란 프로그램의 시간 복잡도, 메모리 정보, 함수 호출 주기, 빈도 등을 분석하는 것이다 @profile은 파이썬에서 제공하는 성능 분석 도구인 line_profiler 모듈에서 제공하는 데코레이터입니다. 이를 이용하여 함수나 메소드의 각 라인에서 소요되는 시간, 메모리 사용량 등의 성능 정보를 확인할 수 있습니다. @profile을 사용하려면 먼저 line_profiler 모듈을 설치해야 합니다. 설치 방법은 다음과 같습니다. p.. 2023. 3. 4.
[PY] Python 메모리 이모저모 - 1 파이썬에 대한 메모리 이모저모를 정리 1. 변수 temp = 'aa' 변수란 특정 메모리 주소를 담고 있는 것을 의미한다. 이것은 메모리 주소를 붙이는 라벨이라고 생각하면 된다 2. id 함수 id(obj)로 사용하며 해당 객체/변수의 메모리 주소 값을 반환한다 hex(id('a')) #'0x7f6bbabc76b0' hex(id('b')) #'0x7f6bbabdc8f0' a와 b는 서로 다른 메모리 주소 값을 반환하는 것을 알 수 있으며, C/C++ 의 & 포인터 연산자와 동일하다 # c/C++ char chr = 'a' printf("%x", &chr) # python hex(id('a')) 3. is 와 == a is b : 메모리 주소를 비교하는 것이며, a == b : 두 개의 값만을 비교한다 것.. 2022. 12. 17.
[PY] 캡슐화 (encapsulation) - @property 캡슐화 (encapsulation) 캡슐화는 클래스 필드에 직접 접근하지 못하게 하는 보호 수단이며, 클래스 내부의 모든 데이터는 프라이빗으로 취급 되어야 한다는 가정을 기반으로 한다. 완전히 캡슐화된 클래스에서는 가능한 적은 수의 메서드만 퍼블릭하게 노출되어야 한다 객체의 상태를 읽거나 쓰는 모든 접근은 세터 도는 케터 메서드를 통해 제공되고 이를 적절한 사용을 보호해야 한다. 예를 들어 Java 에서 다음과 같이 구현된다. public class UserAccount { private String username; public String getUsername() { return username; } public void setUsername(String newUsername) { this.usern.. 2022. 11. 27.
[PY] 객체지향 - 상속 (inheritance) OOP에 대한 설명은 상속, 캡슐화, 다양성과 같은 다양한 용어로 설명하고 있으며, 기본적인 설명을 필요하다 상속 함수를 정의하고 여러 곳에서 호출하게 만들면 소스 코드를 복사해서 붙여 넣기 하는 수고들 피할 수 있다. 함수와 마찬가지로 상속 (inheritance)은 클래스에 적용할 수 있는 코드 재사용 기법이다. 즉, 클래스 들을 부모-자식(parent-chlid) 관계로 만들어 자식 클래스가 부모 클래스의 매소드 사본을 상속 받는 방식으로 여러 클래스들에 걸쳐 매소드를 복제하지 않아도 된다. 프로그램에 추가된 상속된 클래스들이 이루는 거미줄처럼 얽힌 관계는 복잡성을 가중시키기 때문에, 상속은 과대평가나 위험하다고 생각하는 프로그래머도 많다. 확실히 상속은 남용할 여지가 많지만 상속 기겁을 제한적으로.. 2022. 11. 24.
[PY] 파이썬의 global과 nonlocal 파이썬에서 `global`과 `nonlocal`은 변수의 스코프와 관련된 키워드입니다. 다음은 각각의 사용법을 설명합니다: global 키워드 - global 키워드는 함수 내에서 전역 변수를 사용하고자 할 때 사용 - 함수 내부에서 전역 변수를 사용하려면 `global` 키워드를 사용하여 변수를 전역 변수로 선언하며, 이를 통해 함수 내에서 전역 변수의 값을 읽고 수정할 수 있습니다. - global 키워드는 변수가 함수 외부에서 정의되었음을 나타냅니다. count = 0 def increment(): global count count += 1 print(count) # 출력: 0 increment() print(count) # 출력: 1 count 변수는 함수 외부에서 정의되었으며 함수 내부에서 사용.. 2022. 11. 23.
[PY] 파이썬 진수 변환 1. hex() 16진수는 변환함수는 hexadecimal의 앞글자 3개를 따와서 hex입니다. 16진수는 맨 앞에 전두사로 0x가 붙습니다. hex함수는 입력에 해당하는 숫자를 16진수로 변경해 줍니다. hex함수의 반환형은 문자열입니다. a = hex(314) print(a) print(type(a)) 결과) 0x13a 2. oct() 8진수는 변환함수는 octal number의 앞 3글자를 따와서 oct입니다. 8진수는 맨 앞자리 접두사로 0o가 붙습니다. oct함수는 입력에 해당하는 숫자를 8진수로 변환해 줍니다. oct함수의 반환형은 문자열입니다. a = oct(314) print(a) print(type(a)) 결과) 0o472 3. bin() 2진수는 변환함수는 binary number의 앞.. 2022. 11. 22.
[PY] 머신러닝과 부동소수점 부동소수점 머신러닝에서 부동소수점은 매우 중요합니다. 머신러닝 모델은 대개 숫자들의 배열로 나타내어지며, 부동소수점은 대부분의 숫자를 나타낼 때 사용됩니다. 부동소수점은 고정소수점보다 더 정확한 표현을 제공하기 때문에, 머신러닝 모델에서 사용되는 숫자들은 대개 부동소수점으로 표현됩니다. 머신러닝 모델에서 부동소수점은 주로 신경망의 가중치와 편향을 나타내는데 사용됩니다. 이러한 매개변수들은 학습 알고리즘에 의해 조정되며, 이 과정에서 부동소수점의 정밀도가 매우 중요합니다. 정밀도가 높을수록 모델이 더 높은 정확도를 달성할 수 있지만, 연산 비용이 증가할 수 있습니다. 머신러닝에서 부동소수점 연산은 대개 GPU를 사용하여 수행됩니다. 이는 GPU가 대량의 부동소수점 연산을 지원하기 때문입니다. GPU의 대부.. 2022. 11. 21.
[PY] 동시성 (멀티스레딩, 멀티프로세싱) 동시성이란 무엇인가? 동시성은 종종 동시성을 구현하는 실질적인 방법들과 혼동된다. 어떤 프로그래머들은 동시성과 병렬 프로세싱을 동의어로 생각한다. 먼저 동시성에 관해 적절하게 정의해야 한다. 가장 중요한 것이지만 동시성은 병렬성 (parallelism)과 다르다. 동시성은 애플리케이션 구현과 관련된 것도 아니다. 동시성은 프로그램, 알고리즘 도는 문제의 속성이며, 병렬성은 동시에 발생하는 문제에 관한 접근 방식의 하나이다 레슬리 램포트(Leslie Lamport)가 1976년 발표한 논문인 에서는 동시성의 개념을 다음과 같이 정의 한다 $$ "어떤 두 이벤트가 서로 영향을 미칠 수 없을 때, 이 두 이벤트는 동시성을 갖는다" $$ 위 정의에서 이벤트에 프로그램, 알고리즘 또는 문제를 대입해 생각해보자, .. 2022. 11. 9.
[알고리즘]DFS, BFS 이란 너비 우선 탐색(BFS, Breadth-First Search) : 루트 노드(혹은 임의의 노드)에서 시작해서 인접한 노드를 먼저 탐색하는 방법 (즉, 깊게(deep) 탐색하기 전에 넓게(wide) 탐색) 두 노드 사이의 최단 경로 혹은 임의의 경로를 찾고 싶을 때 이 방법을 선택한다. 너비 우선 탐색(BFS)의 특징 직관적이지 않은 면이 있다.(BFS는 시작 노드에서 시작해서 거리에 따라 단계별로 탐색한다고 볼 수 있다.) BFS는 재귀적으로 동작하지 않는다. BFS는 방문한 노드들을 차례로 저장한 후 꺼낼 수 있는 자료 구조인 큐(Queue)를 사용한다.(즉, 선입선출(FIFO) 원칙으로 탐색) ‘Prim’, ‘Dijkstra’ 알고리즘과 유사하다. from collections import dequ.. 2022. 10. 11.