본문 바로가기

Python3

assert를 이용해 shape/차원 확인하기 목차 assert를 이용해 shape/차원 확인하기 넘파이를 이용해 코드를 작성하거나, 모델을 작성하다 보면 shape이나 차원이 헷갈리는 경우가 다수 존재합니다. 이럴 경우 항상 주저하지 말고 assert를 이용하여 디버깅하는 습관을 들여야 합니다. 예시 코드 numpy import numpy def process_array(array): # 입력 배열이 2차원이며, 크기가 3x4인지 확인 assert array.ndim == 2, "배열은 2차원이어야 합니다." assert array.shape == (3, 4), "배열의 크기는 3x4여야 합니다." pytorch import torch def process_tensor(tensor): # 입력 텐서가 2차원이며, 크기가 3x4인지 확인 assert.. 2024. 3. 31.
Rank 1 배열 사용하지 말기 목차 Rank 1 배열 사용시 문제점 & 대체방안 넘파이의 Broadcasting 기능 때문에 헷갈릴 수 있습니다. 만약에 (5,) 크기의 배열 a가 존재할 때 a와 a.T가 연산될 경우 행렬이 아닌 숫자가 나오게 됩니다. 이럴 경우 실제 코드 연산 과정 중에 갑자기 배열이 아닌 숫자가 나와 헷갈리는 경우가 발생할 수 있습니다. import numpy as np a = np.random.randn(5) print(np.dot(a,a.T)) --> 5.83961507626335 따라서 (5,1) 이나 (1,5)로 표시할 경우 헷갈리지 않고 차원을 그대로 유지하게 됩니다. import numpy as np a = np.random.randn(1,5) print(np.dot(a,a.T).shape) --> (.. 2024. 3. 31.
넘파이 속도는 왜 빠를까? 목차 넘파이 속도는 왜 빠를까? 넘파이는 CPU 캐시 효율적 활용, 최적화된 C언어 기반의 구현, 멀티스레딩과 병렬 처리 등의 방식을 이용하여 훨씬 더 빠른 연산을 가능하게 하였습니다. CPU 캐시 효율적 활용 순수 Python 리스트는 포인터 배열을 사용하여 각 요소의 위치를 가리키지만 넘파이의 경우 연속된 메모리 블록에 데이터를 저장합니다. 따라서 CPU 캐시의 활용도를 높일 수 있고, 결과적으로 연산 속도를 크게 개선합니다. 최적화된 C언어 기반의 구현 Numpy는 내부적으로 C언어로 작성된 고성능 수학 라이브러리를 사용합니다. 이 라이브러리들은 대량의 데이터를 효율적으로 처리하기 위해 최적화 되어 있어 연산 속도를 향상시켜줍니다. 속도 향상 예시(Vectorization) import numpy .. 2024. 3. 31.