问题标签 [pybind11]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
pybind11 - 使用 pybind11 创建一个 numpy python 字符串数组
我正在尝试使用 pybind11 从 c++ 修改一个 numpy 字符串数组。我正在使用的代码具有以下结构:
我面临的问题是此错误消息:
pybind11/numpy.h:1114:19:错误:静态断言失败:尝试使用非 POD 或未实现的 POD 类型作为 numpy dtype static_assert(is_pod_struct::value, "尝试使用非 POD 或未实现的 POD 类型作为一个 numpy dtype");
不知道有什么问题。在 python 中,您可以创建 numpy 字符串数组,那么我做错了什么?谢谢。
python - 处理pybind11中的不透明指针
我正在将用 C++ 编写的 Python 模块从 Boost.Python 移动到 Pybind11。我的 C++ 代码依赖于具有不透明指针的 C 库。对于 Boost.Python,我使用此处的文档来处理这些不透明的指针:https ://www.boost.org/doc/libs/1_66_0/libs/python/doc/html/reference/to_from_python_type_conversion/boost_python_opaque_pointer_conv.html
我找不到 Pybind11 的等效代码。作为参考,这是我想使用 Pybind11 向 Python 公开的 C 标头:
这可以通过 Boost.Python 公开,如下所示:
python - How do I import a module created with pybind11 on Ubuntu
I am trying to setup a CMake project that creates python bindings for its c++ functions using pybind11 on Ubuntu.
The directory structure is:
The CMakeLists.txt
file:
The repository builds successfully and the file arithmetic.cpython-36m-x86_64-linux-gnu.so
is produced. How do I import this shared object file into python?
The documentation in the pybind11 docs has this line
but I want to build using CMake and I also don't want to have to specify extra include directories every time I run python to use this module.
How would I import this shared object file into python like a normal python module?
I am using Ubuntu 16.04.
python - 使用 pybind11 绑定 typedef 类型的正确语法是什么?
我有一个与此非常相似的结构:
我也有这种类型的声明。
此结构的绑定定义为:
如何为 typedef 列表类型定义绑定?我不清楚如何在 pybind 文档中执行此操作。
python - 使用 setup.py 构建时删除默认编译器选项
我正在使用 pybind11 将我的 C++ 代码暴露给 Python。假设我正在做的正是pybind 开发人员提供的示例。最后,我正在使用
编译器被调用
我的问题很简单:
我怎样才能,至少暂时,在我的代码中打开断言?即如何告诉 setuptools 忽略-DNDEBUG
编译器选项?
c++ - 从'unsigned __int64'到'unsigned __int64 *'的转换错误 - Pybind11
下载此https://github.com/pybind/pybind11/archive/v2.2.3.zip 并创建一个简单的 cpp 文件后:
和
我收到这个错误
有人知道这可能指的是什么,以及如何解决它吗?
根据要求,这里是完整的错误日志:
python - Python 和 C++ (Pybind11):Python 扩展模块导入错误
我尝试包装一个C++ 函数来pybind
创建一个python-module。使用 Visual Studio 编译后,我完成了创建.pyd
文件。我试图导入这个文件(python>>> import pymodule)但得到这个错误:
.pyd
按照我上面解释的方式导入文件通常是正确的方法吗?为什么我会收到此错误?
python - pybind11 与 numpy 的矩阵乘积
编辑 2(2018 年 6 月 18 日。)
我使用了Matrix
建议的课程
http://pybind11.readthedocs.io/en/stable/advanced/pycpp/numpy.html
使用Matrix
我实现的产品如下:
在发布时(在核心 i7 6700 HQ 上)结果如下:
确实比py::array_t<double>
's好很多。图表(纵坐标为秒,横坐标为方阵大小):
在 intel mkl 下,numpy 相对来说是一点点。在大小区域 [1500,1600] 中两者都有显着下降,mkl 更陡峭。可以注意到,随着矩阵大小的增加,“numpy time / intel time”这个因素正在减少。
这次在核心 i7-7700K 上:
测试python代码是:
编辑 1(2018 年 6 月 16 日。)
我尝试了同样的方法,这次使用 intel mkl,将for
初始代码的循环替换为
初始代码在英特尔酷睿 i5 4570 上运行。这次在英特尔酷睿 i7 6700 HQ 上运行所有三个案例,结果如下:
两个备注:
1) 对于相同的 Python 3.6.5 32 位,在我的笔记本电脑的核心 i7 上使用 numpy 的 Python 比在我在工作中使用的旧核心 i5 桌面上要慢。朴素的 c++ 稍微快一点。很奇怪。
2)在核心 i7 上,c++ intel mkl vs numpy 的因子是 3.41
最初的问题
我写了这个非常幼稚的 c++ pybind11 代码:
我比较了执行两个固定 500*500 随机生成矩阵的乘积的平均(500 个产品)时间,得到以下结果:
那个 118 因素让我感到惊讶。当然,我没想到在第一次尝试时就击败了 numpy,但是两次平均时间之间的 100 倍让我感到惊讶。c++
如果我将 intel mkl 用于产品的一部分或任何其他库,我认为该因素不会得到显着改善。
所以我猜这个因素主要是由numpy数组到py::array_t<double>
s的“转换”和逆转换来解释的。
我知道 numpy 依赖于c
代码(很快c++
就是代码),但我真的很想知道这些转换是如何在 numpy 中完成的。我在 github 上浏览了 numpy 的源代码,但没有找到“编组”部分或 c 产品部分。
python - pybind 如何对 py::list 对象进行操作
为了更好地理解如何使用 pybind 库将参数从 Python 传递到 C++ 函数,我想构建一个小的虚拟/演示代码,我可以在其中接收 C++ 端的 Python 列表,将其转换为浮点指针对象,然后然后打印它。
虽然我知道我可以使用这个py::list
类,但我还没有弄清楚这个类的可用方法。我查看了文档参考,然后查看了代码(list.h、stl.h),但无法确定哪些方法可用。
相当于__getitem__
什么?我有所有可用的 python 方法py::list
吗?
python - 当嵌入式 Python 解释器再次尝试导入外部模块时,C++ 应用程序崩溃
如果我在不同的 pybind11::scoped_interpreter 会话中两次导入外部模块,则应用程序在函数 eval 中的 eval.h 中崩溃,如下行:
和
可重现的示例代码
我觉得这与 pybind11 的 embed.h 中的评论有关:
可以通过再次调用来重新启动解释器
initialize_interpreter
。使用 pybind11 创建的模块可以安全地重新初始化。但是,Python 本身不能完全卸载二进制扩展模块,并且在解释器重启方面有几个注意事项。所有详细信息都可以在 CPython 文档中找到。简而言之,由于引用循环或用户创建的全局数据,并非所有解释器内存都可以释放。
那么有没有办法两次调用Python解释器呢?我有一个 python 文件,其中包含我需要在 C++ 算法执行的不同点调用的辅助 numpy 函数。这是否意味着我不能这样做?