liminfo

NumPy Reference

NumPy 수치 연산 레퍼런스

44개 결과

NumPy Reference 소개

NumPy 레퍼런스는 데이터 과학, 머신러닝, 수치 시뮬레이션 워크플로의 사실상 기반이 되는 ndarray API 전체를 다루는 과학적 Python 컴퓨팅을 위한 포괄적인 치트 시트입니다. 배열 생성 섹션은 Python 리스트에서 배열을 만드는 np.array(), 초기화된 배열을 위한 np.zeros()와 np.ones(), range()와 같은 정수 시퀀스를 위한 np.arange(), 균등 간격 부동소수점 시퀀스를 위한 np.linspace(), 단위 행렬을 위한 np.eye(), 상수값 배열을 위한 np.full()을 문서화합니다. 이것들이 모든 NumPy 계산의 진입점입니다.

인덱싱과 연산은 NumPy 능력의 핵심입니다. a[i:j]를 이용한 기본 슬라이싱, 조건 배열을 이용한 불리언 인덱싱(a[a > 3]은 3보다 큰 요소를 반환), 행/열 인덱스 배열을 이용한 팬시 인덱싱, 조건부 선택을 위한 np.where()가 모두 다루어집니다. 연산 섹션은 요소별 산술 연산(+, -, *, /), np.dot()와 @ 연산자를 이용한 행렬 곱셈, np.sum()과 np.mean() 같은 축 인식 집계, 값과 위치를 찾기 위한 np.max()와 np.argmax(), 다른 형태의 배열이 함께 동작할 수 있게 하는 브로드캐스팅 규칙을 문서화합니다. 선형대수 섹션은 행렬 역함수를 위한 np.linalg.inv(), 행렬식을 위한 np.linalg.det(), 고유값과 고유벡터를 위한 np.linalg.eig(), 특이값 분해를 위한 np.linalg.svd(), 연립방정식을 위한 np.linalg.solve(), 벡터와 행렬 노름을 위한 np.linalg.norm()을 다룹니다.

랜덤 샘플링, 배열 변형, 통계 함수, 파일 I/O가 레퍼런스를 완성합니다. 랜덤 섹션은 균등 분포를 위한 np.random.rand(), 표준 정규 분포를 위한 np.random.randn(), 정수 샘플링을 위한 np.random.randint(), 배열에서 샘플링하는 np.random.choice(), 재현성을 위한 np.random.seed(), 제자리 셔플을 위한 np.random.shuffle()을 다룹니다. 변형은 a.reshape(), a.flatten(), 전치를 위한 a.T, np.concatenate(), np.vstack()/np.hstack(), 배치 차원 추가를 위한 np.expand_dims()를 다룹니다. 통계 함수에는 np.mean(), np.std(), np.var(), np.median(), np.percentile(), np.corrcoef(), np.histogram()이 포함됩니다. 파일 I/O는 .npy 바이너리 형식을 위한 np.save()/np.load(), CSV를 위한 np.savetxt()/np.loadtxt(), 압축 다중 배열 아카이브를 위한 np.savez()를 다룹니다. 이 레퍼런스는 데이터 과학자, ML 엔지니어, 계량 분석가, 수치 데이터를 다루는 Python 개발자가 사용합니다.

주요 기능

  • 배열 생성 — np.array, np.zeros, np.ones, np.arange, np.linspace, np.eye, np.full
  • 불리언 인덱싱(a[a>3]), 팬시 인덱싱(a[[0,2],1]), 조건부 선택 np.where()
  • 요소별 산술 연산과 np.dot() 및 @ 연산자를 이용한 행렬 곱셈
  • 브로드캐스팅 규칙을 포함한 축 인식 np.sum, np.mean, np.max, np.argmax
  • 선형대수 전체 np.linalg — inv, det, eig, svd, solve, norm
  • 랜덤 샘플링 — rand(균등), randn(정규), randint, choice, seed, shuffle
  • 배열 변형 — reshape, flatten, .T 전치, concatenate, vstack/hstack, expand_dims
  • 통계(std, var, median, percentile, corrcoef)와 파일 I/O(npy, csv, npz)

자주 묻는 질문

np.arange()와 np.linspace()의 차이는 무엇인가요?

np.arange(start, stop, step)은 Python의 range()처럼 동작하지만 NumPy 배열을 반환합니다. step은 정수 또는 부동소수점 간격이고 요소의 수는 step에 따라 달라집니다. np.linspace(start, stop, num)은 start와 stop 사이에 정확히 num개의 균등 간격 값을 생성합니다(기본적으로 경계 포함). step 크기를 알 때는 arange를 사용하고, 몇 개의 점이 필요한지 알 때는 linspace를 사용하세요 — 특히 균등 간격이 중요한 플로팅과 적분에서 유용합니다.

NumPy 브로드캐스팅은 어떻게 동작하나요?

브로드캐스팅은 데이터를 복사하지 않고 더 작은 배열을 가상으로 확장해 다른 형태의 배열에서 NumPy가 작동할 수 있게 합니다. 규칙은 차원이 같거나 그 중 하나가 1이면 배열이 호환된다는 것입니다. NumPy는 오른쪽에서 형태를 정렬합니다: (3,1) 형태의 배열과 (1,4) 배열을 브로드캐스팅하면 (3,4) 결과가 나옵니다. 이를 통해 Python 루프 없이 행렬의 각 행에서 평균 벡터를 빼는 것 같은 효율적인 벡터화 연산이 가능합니다.

np.dot()와 @ 연산자의 차이는 무엇인가요?

2D 배열(행렬)의 경우 np.dot(A, B)와 A @ B 모두 행렬 곱셈을 계산합니다. 1D 배열의 경우 np.dot는 내적(도트 곱)을 계산합니다. @ 연산자(matmul)는 더 읽기 쉽고 수학적 표기법과 일치하므로 현대 NumPy 코드에서 일반적으로 선호됩니다. np.dot는 고차원 배열에서 약간 다른 동작을 합니다(첫 번째의 마지막 축과 두 번째의 끝에서 두 번째 축에 대한 합산 곱으로 처리), @ 연산자는 더 엄격한 matmul 의미론을 따릅니다.

NumPy에서 불리언 인덱싱은 어떻게 동작하나요?

불리언 인덱싱은 True/False 값의 배열을 인덱스로 전달해 요소를 선택합니다. a[a > 3]을 작성하면 NumPy는 먼저 a > 3을 평가해 같은 형태의 불리언 배열을 생성하고, 조건이 True인 요소만 1D 배열로 반환합니다. &(and)와 |(or)로 조건을 결합할 수 있습니다: a[(a > 2) & (a < 8)]. 불리언 인덱싱된 선택에 할당할 수도 있습니다: a[a < 0] = 0은 모든 음수 요소를 0으로 설정합니다.

SVD(특이값 분해)란 무엇이고 언제 사용하나요?

SVD는 행렬 A를 세 행렬로 분해합니다: A = U @ np.diag(S) @ Vt, 여기서 U와 Vt는 직교 행렬이고 S는 특이값을 포함합니다. np.linalg.svd(A)는 U, S, Vt를 반환합니다. SVD는 차원 축소(PCA), 비정방 행렬의 유사 역함수 계산, 이미지 압축(가장 큰 특이값만 유지), 최소 제곱 문제 풀이에 사용됩니다. 일반 행렬에서 고유값 분해보다 수치적으로 더 안정적입니다.

np.random.seed()를 재현성을 위해 어떻게 사용하나요?

임의 연산 전에 np.random.seed(정수)를 호출해 난수 생성기를 알려진 상태로 초기화합니다. 그 이후의 모든 임의 호출은 실행할 때마다 같은 수열을 생성합니다. 예를 들어 np.random.seed(42) 다음에 np.random.randn(3)을 호출하면 항상 같은 세 숫자가 나옵니다. 현대 NumPy(1.17+)에서는 Generator를 사용하는 것이 선호됩니다: rng = np.random.default_rng(42)를 만들고 rng.standard_normal(3)을 사용하면 스레드 안전하고 통계적으로 우수합니다.

reshape()와 flatten()의 차이는 무엇인가요?

reshape(shape)는 데이터를 복사하지 않고 주어진 형태로 배열의 새 뷰를 반환합니다 — 변형된 배열을 수정하면 원본이 수정됩니다. 하나의 차원에 -1을 사용하면 NumPy가 추론합니다: a.reshape(2, -1). flatten()은 항상 배열을 1D로 축소한 복사본을 반환합니다. ravel()은 flatten()과 비슷하지만 가능할 때는 뷰를, 그렇지 않으면 복사본을 반환합니다. 차원을 변경할 때는 reshape를, 보장된 독립적인 1D 복사본이 필요할 때는 flatten을, 잠재적으로 복사 없는 1D 뷰에는 ravel을 사용하세요.

NumPy 배열을 저장하고 불러오는 방법은?

np.save("file.npy", array)로 단일 배열을 바이너리 형식으로 저장하고 np.load("file.npy")로 불러옵니다 — 빠르고 dtype을 정확히 보존합니다. 텍스트 기반 CSV 출력에는 np.savetxt("file.csv", array, delimiter=",")와 np.loadtxt("file.csv", delimiter=",")를 사용합니다. 하나의 파일에 여러 배열을 저장하려면 np.savez("file.npz", x=a, y=b)를 사용하고 loaded = np.load("file.npz"); loaded["x"]로 접근합니다. .npz 형식은 압축되어 있어 여러 이름 있는 배열로 구성된 데이터셋을 저장하기에 이상적입니다.