最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pybind11和numpy進(jìn)行交互的方法

 更新時(shí)間:2019年07月04日 10:26:08   作者:醬油  
這篇文章主要介紹了pybind11和numpy進(jìn)行交互的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下

使用一個(gè)遵循buffer protocol的對(duì)象就可以和numpy交互了.

這個(gè)buffer_protocol要有哪些東西呢? 要有如下接口:

struct buffer_info {
  void *ptr;
  ssize_t itemsize;
  std::string format;
  ssize_t ndim;
  std::vector<ssize_t> shape;
  std::vector<ssize_t> strides;
};

其實(shí)就是一個(gè)指向數(shù)組的指針+各個(gè)維度的信息就可以了. 然后我們就可以用指針+偏移來(lái)訪問(wèn)數(shù)字中的任意位置上的數(shù)字了.

下面是一個(gè)可以跑的例子:

#include <pybind11/pybind11.h>
 #include <pybind11/numpy.h>
 namespace py = pybind11;
 py::array_t<double> add_arrays(py::array_t<double> input1, py::array_t<double> input2) {
   py::buffer_info buf1 = input1.request(), buf2 = input2.request();
   if (buf1.ndim != 1 || buf2.ndim != 1)
     throw std::runtime_error("Number of dimensions must be one");
   if (buf1.size != buf2.size)
     throw std::runtime_error("Input shapes must match");
   /* No pointer is passed, so NumPy will allocate the buffer */
   auto result = py::array_t<double>(buf1.size);
   py::buffer_info buf3 = result.request();
   double *ptr1 = (double *) buf1.ptr,
      *ptr2 = (double *) buf2.ptr,
      *ptr3 = (double *) buf3.ptr;
   for (size_t idx = 0; idx < buf1.shape[0]; idx++)
     ptr3[idx] = ptr1[idx] + ptr2[idx];
   return result;
 }
 
 PYBIND11_MODULE(test, m) {
   m.def("add_arrays", &add_arrays, "Add two NumPy arrays");
 }

array_t里的buf就是一個(gè)兼容的接口.

buf中可以得到指針和對(duì)應(yīng)數(shù)字的維度信息.

為了方便我們甚至可以使用Eigen當(dāng)作我們兼容numpy的接口:

#include <pybind11/pybind11.h>
 #include <pybind11/eigen.h> 
 #include <Eigen/LU> 
 // N.B. this would equally work with Eigen-types that are not predefined. For example replacing
 // all occurrences of "Eigen::MatrixXd" with "MatD", with the following definition:
 //
 // typedef Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> MatD;
 
 Eigen::MatrixXd inv(const Eigen::MatrixXd &xs)
 {
  return xs.inverse();
 }
 
 double det(const Eigen::MatrixXd &xs)
 {
  return xs.determinant();
 }
 
 namespace py = pybind11;
 
 PYBIND11_MODULE(example,m)
 {
  m.doc() = "pybind11 example plugin";
 
  m.def("inv", &inv);
 
  m.def("det", &det);
 }

更多參考:

https://pybind11.readthedocs.io/en/stable/advanced/pycpp/numpy.html

https://github.com/tdegeus/pybind11_examples

總結(jié)

以上所述是小編給大家介紹的pybind11和numpy進(jìn)行交互的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • Python使用FastAPI制作一個(gè)視頻流媒體平臺(tái)

    Python使用FastAPI制作一個(gè)視頻流媒體平臺(tái)

    在構(gòu)建視頻流媒體平臺(tái)時(shí),用戶認(rèn)證與視頻上傳是兩個(gè)至關(guān)重要的功能,FastAPI作為一個(gè)高效的Web框架,可以輕松處理這些需求,下面我們看看具體實(shí)現(xiàn)方法吧
    2025-04-04
  • python 字典item與iteritems的區(qū)別詳解

    python 字典item與iteritems的區(qū)別詳解

    這篇文章主要介紹了python 字典item與iteritems的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Pandas中數(shù)據(jù)表合并的幾種實(shí)現(xiàn)方法

    Pandas中數(shù)據(jù)表合并的幾種實(shí)現(xiàn)方法

    Pandas提供了merge()、concat()和join()三種方法來(lái)合并數(shù)據(jù)表,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • 使用django的ORM框架按月統(tǒng)計(jì)近一年內(nèi)的數(shù)據(jù)方法

    使用django的ORM框架按月統(tǒng)計(jì)近一年內(nèi)的數(shù)據(jù)方法

    今天小編就為大家分享一篇使用django的ORM框架按月統(tǒng)計(jì)近一年內(nèi)的數(shù)據(jù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • Python函數(shù)中*args和**kwargs來(lái)傳遞變長(zhǎng)參數(shù)的用法

    Python函數(shù)中*args和**kwargs來(lái)傳遞變長(zhǎng)參數(shù)的用法

    這篇文章主要介紹了Python編程中使用*args和**kwargs來(lái)傳遞可變參數(shù)的用法,文中舉了變長(zhǎng)參數(shù)的例子,需要的朋友可以參考下
    2016-01-01
  • Python實(shí)現(xiàn)圖的廣度和深度優(yōu)先路徑搜索算法

    Python實(shí)現(xiàn)圖的廣度和深度優(yōu)先路徑搜索算法

    圖是一種抽象數(shù)據(jù)結(jié)構(gòu),本質(zhì)和樹結(jié)構(gòu)是一樣的。圖與樹相比較,圖具有封閉性,可以把樹結(jié)構(gòu)看成是圖結(jié)構(gòu)的前生。本文將利用Python實(shí)現(xiàn)圖的廣度和深度優(yōu)先路徑搜索算法,感興趣的可以學(xué)習(xí)一下
    2022-04-04
  • Python畫圖常用代碼總結(jié)大全(20個(gè)畫圖代碼現(xiàn)拿現(xiàn)用)

    Python畫圖常用代碼總結(jié)大全(20個(gè)畫圖代碼現(xiàn)拿現(xiàn)用)

    Python是一種高級(jí)編程語(yǔ)言,擁有豐富的圖形庫(kù),可以完成繪制各種類型的圖形任務(wù),下面這篇文章主要給大家介紹了關(guān)于Python畫圖常用代碼的相關(guān)資料,文中介紹的這20個(gè)畫圖代碼可以現(xiàn)拿現(xiàn)用,需要的朋友可以參考下
    2023-06-06
  • 如何在 Matplotlib 中更改繪圖背景的實(shí)現(xiàn)

    如何在 Matplotlib 中更改繪圖背景的實(shí)現(xiàn)

    這篇文章主要介紹了如何在 Matplotlib 中更改繪圖背景的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • python安裝cxOracle避坑總結(jié)不要直接pip install

    python安裝cxOracle避坑總結(jié)不要直接pip install

    這篇文章主要為大家介紹了python安裝cx_Oracle是遇到的一些問(wèn)題的解決辦法的總結(jié),來(lái)幫大家避避坑有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步
    2021-10-10
  • Python?pygame繪制游戲圖像

    Python?pygame繪制游戲圖像

    這篇文章主要介紹了Python?pygame繪制游戲圖像,文章圍繞主題展開pygame模塊完成飛機(jī)大戰(zhàn)游戲的實(shí)戰(zhàn)開發(fā)的案例詳情,需要的朋友可以參考一下
    2022-08-08

最新評(píng)論

绵阳市| 高邑县| 通榆县| 宁国市| 永安市| 金溪县| 锦州市| 淳化县| 翁源县| 故城县| 贵定县| 崇仁县| 华蓥市| 鸡泽县| 连州市| 柯坪县| 赣州市| 双柏县| 唐海县| 井冈山市| 酒泉市| 新干县| 临沭县| 英德市| 永川市| 木里| 伊宁县| 中卫市| 渭南市| 遵义市| 广宁县| 岳阳市| 德兴市| 通州区| 略阳县| 清丰县| 濮阳县| 连山| 长岛县| 台南县| 湛江市|