NumCpp: การใช้ส่วนหัว Templatized เฉพาะ C ++ ของ Python NumPy Library
เวอร์ชัน:
ใบอนุญาต
การทดสอบ
มาตรฐาน C++:
คอมไพเลอร์:
วิชวลสตูดิโอ: 2022
GNU: 11.3 เสียงดังกราว: 14
เพิ่มเวอร์ชัน:
1.73+
เอกสารประกอบ
GitHub
การติดตั้ง
อาคาร
บันทึกประจำรุ่น
จาก NumPy ถึง NumCpp – คู่มือเริ่มต้นใช้งานฉบับย่อ
คู่มือเริ่มต้นใช้งานฉบับย่อนี้มีไว้เพื่อเป็นภาพรวมโดยย่อของบางสิ่งที่สามารถทำได้ด้วย NumCpp สำหรับรายละเอียดทั้งหมดที่มีอยู่ในไลบรารี NumCpp โปรดไปที่เอกสารฉบับเต็ม
ตู้คอนเทนเนอร์
โครงสร้างข้อมูลหลักใน NumCpp คือ NdArray
โดยเนื้อแท้แล้วมันเป็นคลาสอาเรย์ 2 มิติ โดยมีอาเรย์ 1D ถูกนำมาใช้เป็นอาเรย์ 1xN นอกจากนี้ยังมีคลาส DataCube
ที่จัดเตรียมไว้เป็นคอนเทนเนอร์ที่สะดวกสำหรับการจัดเก็บอาร์เรย์ของ 2D NdArray
แต่มีประโยชน์อย่างจำกัดเมื่อเทียบกับคอนเทนเนอร์ธรรมดา
นัมปี้ | 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() |
ตัวเริ่มต้น
มีฟังก์ชัน Initializer มากมายที่ส่งคืน 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) |
สุ่ม
โมดูลสุ่มมีวิธีง่ายๆ ในการสร้างอาร์เรย์แบบสุ่ม
นัมปี้ | 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) |