NumCpp: Python NumPy 라이브러리의 템플릿화된 헤더 전용 C++ 구현
버전:
특허
테스트
C++ 표준:
컴파일러:
비주얼 스튜디오: 2022
GNU: 11.3 클랭: 14
부스트 버전:
1.73+
선적 서류 비치
GitHub
설치
건물
릴리스 노트
NumPy에서 NumCpp까지 – 빠른 시작 가이드
이 빠른 시작 가이드는 NumCpp 로 수행할 수 있는 몇 가지 작업에 대한 매우 간략한 개요를 제공합니다. NumCpp 라이브러리에서 사용할 수 있는 모든 항목에 대한 전체 분석을 보려면 전체 문서를 방문하세요.
컨테이너
NumCpp 의 주요 데이터 구조는 NdArray
입니다. 이는 본질적으로 2D 배열 클래스이며, 1D 배열은 1xN 배열로 구현됩니다. 2D NdArray
배열을 저장하기 위한 편의 컨테이너로 제공되는 DataCube
클래스도 있지만 단순 컨테이너에 비해 유용성이 제한되어 있습니다.
넘파이 | NumCpp |
---|
a = np.array([[1, 2], [3, 4], [5, 6]]) | nc::NdArray a = { {1, 2}, {3, 4}, {5, 6} } |
a.reshape([2, 3]) | a.reshape(2, 3) |
a.astype(np.double) | a.astype() |
초기화 프로그램
일반적인 요구에 따라 NdArray
를 반환하는 많은 초기화 함수가 제공됩니다.
넘파이 | NumCpp |
---|
np.linspace(1, 10, 5) | nc::linspace(1, 10, 5) |
np.arange(3, 7) | nc::arange(3, 7) |
np.eye(4) | nc::eye(4) |
np.zeros([3, 4]) | nc::zeros(3, 4) |
| nc::NdArray(3, 4) a = 0 |
np.ones([3, 4]) | nc::ones(3, 4) |
| nc::NdArray(3, 4) a = 1 |
np.nans([3, 4]) | nc::nans(3, 4) |
| nc::NdArray(3, 4) a = nc::constants::nan |
np.empty([3, 4]) | nc::empty(3, 4) |
| nc::NdArray(3, 4) a |
슬라이싱/브로드캐스팅
NumCpp는 NumPy 스타일의 슬라이싱 및 브로드캐스팅을 제공합니다.
넘파이 | NumCpp |
---|
a[2, 3] | a(2, 3) |
a[2:5, 5:8] | a(nc::Slice(2, 5), nc::Slice(5, 8)) |
| a({2, 5}, {5, 8}) |
a[:, 7] | a(a.rSlice(), 7) |
a[a > 5] | a[a > 5] |
a[a > 5] = 0 | a.putMask(a > 5, 0) |
무작위의
Random 모듈은 무작위 배열을 생성하는 간단한 방법을 제공합니다.
넘파이 | NumCpp |
---|
np.random.seed(666) | nc::random::seed(666) |
np.random.randn(3, 4) | nc::random::randN(nc::Shape(3, 4)) |
| nc::random::randN({3, 4}) |
np.random.randint(0, 10, [3, 4]) | nc::random::randInt(nc::Shape(3, 4), 0, 10) |
| nc::random::randInt({3, 4}, 0, 10) |
np.random.rand(3, 4) | nc::random::rand(nc::Shape(3,4)) |
| nc::random::rand({3, 4}) |
np.random.choice(a, 3) | nc::random::choice(a, 3) |
연쇄
NdArray
연결하는 방법에는 여러 가지가 있습니다.
넘파이 | NumCpp |
---|
np.stack([a, b, c], axis=0) | nc::stack({a, b, c}, nc::Axis::ROW) |
np.vstack([a, b, c]) | nc::vstack({a, b, c}) |
np.hstack([a, b, c]) | nc::hstack({a, b, c}) |
np.append(a, b, axis=1) | nc::append(a, b, nc::Axis::COL) |
대각선, 삼각형, 뒤집기
다음은 새로운 NdArray
를 반환합니다.
넘파이 | NumCpp |
---|
np.diagonal(a) | nc::diagonal(a) |
np.triu(a) | nc::triu(a) |
np.tril(a) | nc::tril(a) |
np.flip(a, axis=0) | nc::flip(a, nc::Axis::ROW) |
np.flipud(a) | nc::flipud(a) |
np.fliplr(a) | nc::fliplr(a) |
반복
NumCpp는 다양한 방식으로 배열을 반복하기 위한 반복자 쌍을 제공하는 C++ STL의 관용구를 따릅니다.
넘파이 | NumCpp |
---|
for value in a | for(auto it = a.begin(); it < a.end(); ++it) |
| for(auto& value : a) |
논리적
NumCpp 의 논리 함수는 NumPy 와 동일하게 동작합니다.
넘파이 | NumCpp |
---|
np.where(a > 5, a, b) | nc::where(a > 5, a, b) |
np.any(a) | nc::any(a) |
np.all(a) | nc::all(a) |
np.logical_and(a, b) | nc::logical_and(a, b) |
np.logical_or(a, b) | nc::logical_or(a, b) |
np.isclose(a, b) | nc::isclose(a, b) |
np.allclose(a, b) | nc::allclose(a, b) |
비교
넘파이 | NumCpp |
---|
np.equal(a, b) | nc::equal(a, b) |
| a == b |
np.not_equal(a, b) | nc::not_equal(a, b) |
| a != b |
rows, cols = np.nonzero(a) | auto [rows, cols] = nc::nonzero(a) |
최소, 최대, 정렬
넘파이 | NumCpp |
---|
np.min(a) | nc::min(a) |
np.max(a) | nc::max(a) |
np.argmin(a) | nc::argmin(a) |
np.argmax(a) | nc::argmax(a) |
np.sort(a, axis=0) | nc::sort(a, nc::Axis::ROW) |
np.argsort(a, axis=1) | nc::argsort(a, nc::Axis::COL) |
np.unique(a) | nc::unique(a) |
np.setdiff1d(a, b) | nc::setdiff1d(a, b) |
np.diff(a) | nc::diff(a) |
감속기
리듀서는 지정된 축을 따라 NdArray
값을 누적합니다. 축을 지정하지 않으면 모든 축을 따라 값이 누적됩니다.
넘파이 | NumCpp |
---|
np.sum(a) | nc::sum(a) |
np.sum(a, axis=0) | nc::sum(a, nc::Axis::ROW) |
np.prod(a) | nc::prod(a) |
np.prod(a, axis=0) | nc::prod(a, nc::Axis::ROW) |
np.mean(a) | nc::mean(a) |
np.mean(a, axis=0) | nc::mean(a, nc::Axis::ROW) |
np.count_nonzero(a) | nc::count_nonzero(a) |
np.count_nonzero(a, axis=0) | nc::count_nonzero(a, nc::Axis::ROW) |
입출력
인쇄 및 파일 출력 방법. 모든 NumCpp 클래스는 print()
메서드와 <<
스트림 연산자를 지원합니다.
넘파이 | NumCpp |
---|
print(a) | a.print() |
| std::cout << a |
a.tofile(filename, sep='n') | a.tofile(filename, 'n') |
np.fromfile(filename, sep='n') | nc::fromfile(filename, 'n') |
np.dump(a, filename) | nc::dump(a, filename) |
np.load(filename) | nc::load(filename) |
수학 함수
NumCpp 범용 함수는 다수의 수학 함수에 대해 제공됩니다.
기본 기능
넘파이 | NumCpp |
---|
np.abs(a) | nc::abs(a) |
np.sign(a) | nc::sign(a) |
np.remainder(a, b) | nc::remainder(a, b) |
np.clip(a, 3, 8) | nc::clip(a, 3, 8) |
np.interp(x, xp, fp) | nc::interp(x, xp, fp) |
지수함수
넘파이 | NumCpp |
---|
np.exp(a) | nc::exp(a) |
np.expm1(a) | nc::expm1(a) |
np.log(a) | nc::log(a) |
np.log1p(a) | nc::log1p(a) |
전원 기능
넘파이 | NumCpp |
---|
np.power(a, 4) | nc::power(a, 4) |
np.sqrt(a) | nc::sqrt(a) |
np.square(a) | nc::square(a) |
np.cbrt(a) | nc::cbrt(a) |
삼각함수
넘파이 | NumCpp |
---|
np.sin(a) | nc::sin(a) |
np.cos(a) | nc::cos(a) |
np.tan(a) | nc::tan(a) |
쌍곡선 함수
넘파이 | NumCpp |
---|
np.sinh(a) | nc::sinh(a) |
np.cosh(a) | nc::cosh(a) |
np.tanh(a) | nc::tanh(a) |
분류 기능
넘파이 | NumCpp |
---|
np.isnan(a) | nc::isnan(a) |
np.isinf(a) | nc::isinf(a) |
선형대수학
넘파이 | NumCpp |
---|
np.linalg.norm(a) | nc::norm(a) |
np.dot(a, b) | nc::dot(a, b) |
np.linalg.det(a) | nc::linalg::det(a) |
np.linalg.inv(a) | nc::linalg::inv(a) |
np.linalg.lstsq(a, b) | nc::linalg::lstsq(a, b) |
np.linalg.matrix_power(a, 3) | nc::linalg::matrix_power(a, 3) |
Np.linalg.multi_dot(a, b, c) | nc::linalg::multi_dot({a, b, c}) |
np.linalg.svd(a) | nc::linalg::svd(a) |