Python
-
파이썬은 왜 느릴까?언어/파이썬 2021. 1. 21. 18:05
파이썬이 왜 느린지 얘기할 때 가장 많이 듣는 얘기는 전역 인터프리터 락 즉, Global Interpreter Lock(GIL)이 아닐까 싶다. 파이썬 최초의 공식 구현체인 CPython은 개발 초기에 번거로운 동시성 관리를 편리하게 하고 Thread-safe하지 않은 CPython의 메모리 관리를 쉽게 하기 위해, GIL로 파이썬 객체에 대한 접근을 제한하는 형태로 설계했다. GIL은 하나의 스레드가 자원을 독점하는 형태로 실행된다. 지금 생각하면 정말 좋지 않은 형태이지만 CPython 개발이 시작된 것이 1994년이었으니, CPU가 하나던 당시에는 충분히 그런 선택을 할 만했고, GIL 디자인에는 아무런 문제가 없었다. 지금처럼 멀티코어가 당연한 세상에서, 하나의 스레드가 자원을 독점하는 형태로 ..
-
== 와 is 의 차이언어/파이썬 2021. 1. 13. 10:01
is는 변수가 같은 Object 를 가르키면 True (같은 Object 인것인지를 확인하기 위해서는 id 함수를 사용하면 된다.) == 는 변수가 같은 Value 를 가리키면 True 이다 또한 신기한 것은 파이썬은 모든것이 다 객체이므로 id 메소드에 숫자를 넣어도 id 값이 나오고 None을 넣어도 id 값이 나오며 이 값은 변하지 않는 값이다. 또한 while 클래스_이름 is not None: 보다는 while not 클래스_이름 : 만 하여도 while 문이 돌아간다. 그 뿐만 아니라 if 문에서도 마찬가지 이다. 즉 조건절, 조건문에서 None은 False의 개념으로 not None 은 True의 개념으로 쓰이는 거 같다. list 에서도 조건문은 작동하는데 만약 list 가 빈상태이면 Fa..
-
최댓값과 최솟값언어/파이썬 2021. 1. 12. 12:42
최댓값과 최솟값의 초깃값을 지정하는 방법에는 여러 가지가 있다. 우선 첫번째로는 sys를 사용하면 위와 같이 maxsize를 사용하면 된다. 이 경우 9223372036854775808 가 나온다. 그 다음 float()를 사용하여 하는 방법도 있다. 이 경우 "float('inf')"가 생성되는데 이것이 sys.maxsize 보다 크다 하지만 알고리즘을 풀때는 보통 범위가 주어지기 때문에 sys.maxsize만 써도 충분하다. 마지막으로 가장 않좋은 방법인 999999999를 쓰는 방법이 있다. 물론 알고리즘을 풀때 사이즈를 다 정해주어서 크게 상관이 없지만 파이썬의 숫자형은 임의 정밀도 를 지원하며 사실상 무한대의 값을 지원하기 때문에 sys.maxsize를 선언하는것도 그렇게 큰 의미는 없다. 하지..
-
파이썬 내장함수들언어/파이썬 2021. 1. 11. 23:09
파이썬은 여러가지 내장 함수들이 있다. 모든것을 외우면 물론 좋겠지만 체득 하는것이 더 효율적이라고 판단하여 기억이 나지 않을때 마다 하나씩 채우기로 한다. 1. zip 2. range 3. any 4. all zip zip()은 2개 이상의 시퀀스를 짧은 길이를 기준으로 일대일 대응하는 새로운 튜플시퀀스를 만드는 역할을 한다. 밑의 사진을 예시로 설명해보겠다. 파이썬 2에서는 zip()의 결과가 바로 리스트가 된다. 하지만 파이썬 3+에서는 제너레이터를 리턴한다. 제너레이터를 리턴하게 되면 전의 포스팅 처럼 메모리 적인 부분에서 좀 더 효율적으로 사용할 수 있는 이점이 있다. 제너레이터에서 실젯값을 추출하기 위해서는 다음과 같이 list()로 한번 더 묶어주면 된다. 아울러 zip()의 결과 자체는 리..
-
nn.Module에서 super머신러닝 및 딥러닝 2021. 1. 10. 22:26
위에 코드들의 공통점은 클래스들이 모두 pytorch의 nn.Module을 상속했다는 것이다. 하지만 이것의 super에서 __init__ 을 호출 할때 어떠한 것은 매개변수에 자신의 클래스 이름과 self를 넣는 반면 어떠한 것은 아무것도 넣지 않고 그냥 호출한다. 개인적으로 뭔가 이해가 안되는 코드가 있으면 계속 눈에 밟여서 신경이 쓰여 찾아본 결과 단순 버전 차이로 발생된 차이이다. 즉, pytorch의 전 버전에서는 어떠한 파라미터를 넣지 않는 것이 맞는것이다. 위의 코드는 pytorch에서 class Module(object): 의 __init__을 가져온것이다. 보다시피 self 외에 어떠한 파라미터도 갖지 않는 것을 볼 수 있다. 그렇다면 어떤 클래스를 만들고 만약 그 클래스가 pytorch..
-
정적메소드와 클래스메소드언어/파이썬 2021. 1. 9. 16:33
파이썬에서 해당 문제는 클래스안에서 다뤄진다. 보통의 인스턴스 메소드가 객체의 인스턴스 필드를 self를 통해 접근할 수 있는 반면, 정적 메소드는 이러한 self 파라미터를 갖지 않고 인스턴스 변수에 엑세스 할 수 없다. 예를 들어 현재 정적메소드로 되어있는 is_square함수를 보면 어떠한 인스턴스 필드를 사용하지 않는것을 볼 수 있다. 보통 staticmethod는 객체 필드와 독립적이지만 로직상 클래스내에 포함됭야 하는 메소드에 사용된다. 이는 메소드 앞에 @staticmethod라는 Decorator를 표시하여 해당 메소드가 정적 메소드인것을 표시한다. 클래스 메소드는 메소드 앞에 @classmethod 라는 Decorator를 표시하여 해당 메소드가 클래스 메소드라는 것을 표시한다. 클래스 ..
-
np.zeros 와 np.zeros_like 의 차이머신러닝 및 딥러닝 2021. 1. 6. 12:57
np.random.randn vs np.random.rand 와 더불어 가장 헷갈리는 것이 np.zero 와 np.zeros_like 의 차이일것이다. 언어 자체에 의미를 두는것이 좀 더 빠른 이해에 도움이 된다. 시간이 없는 사람들을 위해 간단히 만 설명하자면 np.zeros : 0으로 가득찬 Array를 배출한다. 즉, 여기에는 튜플, int, 혹은 list의 값이 들어와야 한다 그렇게 되면 해당하는 shape으로 형태를 만들어준다음 Array를 return 한다. 만약 여기에 np.zeros_like 처럼 변수를 넣어주면 오류가 나온다. np.zeros_like : 어떤 변수만큼의 사이즈인 0 으로 가득 찬 Array를 배출한다. 즉, 여기에는 변수가 들어와야한다. 여기는 변수 말고도 그냥 [2,3..