使用 pybind11 修改 std::array 的默认值

2024-05-26

我的目标是修改在中声明的数组C++ struct并赋予默认值。

我读过了this https://pybind11.readthedocs.io/en/stable/advanced/cast/stl.html#making-opaque-types, this https://pybind11.readthedocs.io/en/stable/advanced/cast/stl.html#binding-stl-containers,但不幸的是我无法将其与我的问题联系起来。

示例代码

  • C++
class Math{
struct Data
{
  std::array<float, 5> id_ = {0}; // all value set to ZERO
  std::array<uint32_t, 5> length_ = {0}; // all value set to ZERO
  std::array<bool, 5> status_ = {0}; // all value set to ZERO
  float x_ = 7.5;
};
};
  • 绑定代码
#include <pybind11/pybind11.h>
#include <pybind11/stl.h>
#include <pybind11/complex.h>

namespace py = pybind11;

PYBIND11_MODULE(do_math, m)
{
    py::class_<Math::Data> Data (m, "Data");
    Data.def(py::init<>())
    .def_readwrite("id_", &Math::Data::id_)
    .def_readwrite("length_", &Math::Data::length_)
    .def_readwrite("status_", &Math::Data::status_)
    .def_readwrite("x_", &Math::Data::x_);
}
  • 现在我想修改所有std::array会员价值。我只在这里展示id_.
  • In python file我可以访问id_成员变量及其打印[0.0, 0.0, 0.0, 0.0, 0.0]以及x_哪个输出是7.5
import do_math
struct_obj = do_math.Data()
print(struct_obj.id_)
print(struct_obj.x_)
  • 现在想修改的值id_但在这里我无法做到这一点。
struct_obj.id_[2] = 2.2 # cannot modify
struct_obj.x_ = 1.5 # it is modified

仍然输出struct_obj.id_ is [0.0, 0.0, 0.0, 0.0, 0.0] while struct_obj.x_更改为1.5。我该如何修改id_python 中的数组?

到目前为止已采取的方法

依照指示这个答案 https://stackoverflow.com/a/58723691/10634362我曾尝试实施但失败了。

#include <pybind11/pybind11.h>
#include <pybind11/stl.h>
#include <pybind11/complex.h>
#include "pybind11/numpy.h"
#include <pybind11/pytypes.h>

namespace py = pybind11;

PYBIND11_MODULE(do_math, m)
{
    py::class_<Math::Data> Data (m, "Data", py::buffer_protocol());
    Data.def(py::init<>())
    .def_property("id_", [](Math::Data &p) -> py::array {
            auto dtype = py::dtype(py::format_descriptor<float>::format());
            auto base = py::array(dtype, {5}, {sizeof(float)});
            return py::array(
                dtype, {5}, {sizeof(float)}, p.id_, base);
        }, [](Math::Data& p) {});
}
  • 错误信息 :error: no matching constructor for initialization of 'py::array' return py::array(

类型是struct_obj.id_蟒蛇式的list?我认为这就是问题所在。在这种情况下,将创建一个新的 Pythonic 列表作为 C++ 数组的副本,以提供方便的 Pythonic 接口。然而,这个列表不再连接到底层的 C++ 对象,因为list不能作为对 a 的引用std::array.

解决方案是分配id_直接代替id_[2]:

l = struct_obj.id
l[2] = 2.2 # cannot modify
struct_obj.id = l

或导出id_ 作为不透明物体 https://pybind11.readthedocs.io/en/stable/advanced/cast/stl.html#making-opaque-types with PYBIND11_MAKE_OPAQUE.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 pybind11 修改 std::array 的默认值 的相关文章

  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • 在 Javascript 中连接空数组

    我正在浏览一些代码 我想知道这有什么用处 grid push concat row 根据我的理解 它等同于 grid push row 为什么要大惊小怪 连接 你想使用 concat当您需要展平数组并且没有由其他数组组成的数组时 例如 va
  • 如何计算 3D 坐标的线性索引,反之亦然?

    如果我有一个点 x y z 如何找到该点的线性索引 i 我的编号方案是 0 0 0 是 0 1 0 0 是 1 0 1 0 是最大 x 维度 另外 如果我有一个线性坐标 i 我如何找到 x y z 我似乎无法在谷歌上找到这个 所有结果都充满
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class

随机推荐

  • 为什么 Chrome 中存在 Document.prototype.getElementsByName?

    我所知 getElementsByName是一个定义在中的函数HTMLDocument and HTMLDocument继承自Document and Document继承自Node 那为什么我能看到Document prototype g
  • Android Studio 2.0 AVD 管理器中缺少 API 14 和 15

    在Android Studio中创建AVD时 列表中缺少API 14和15的系统映像 尽管我实际上在SDK管理器中安装了相应的SDK版本 我认为这个问题是在升级到Android Studio 2 0后出现的 如何为这些 API 版本创建 A
  • 匿名 IComparer 实现

    是否可以定义 IComparer 的匿名实现 我相信 Java 允许内联定义匿名类 C 可以吗 看着这段代码我想定义一个自定义IComparer inline public static IOrderedEnumerable
  • python subprocess proc.stderr.read() 引入额外的行?

    我想运行一些命令并抓取输出到 stderr 的任何内容 我有两个版本的函数可以执行此操作 版本 1 def Getstatusoutput cmd Return status output of executing cmd in a she
  • 将 Null 与 MySQL 触发器中的另一个值进行比较

    所以这是我的问题 我在更新表行时比较新值和旧值 但新值或旧值有时会为空 所以下面的代码不起作用 我可以解决这个问题吗 谢谢 BEFORE UPDATE ON mytable FOR EACH ROW BEGIN IF OLD assigne
  • 将 XMM 寄存器压入堆栈

    有没有办法将打包双字整数从 XMM 寄存器推送到堆栈 然后在需要时将其弹出 理想情况下 我正在寻找通用寄存器的 PUSH 或 POP 之类的东西 我已经检查了英特尔手册 但我要么错过了命令 要么没有 或者我是否必须将值解压到通用寄存器然后推
  • 布局中的模型破坏了其他页面

    由于缺乏 MVC4 经验 我有一个设计缺陷 问题是我的布局中有一个模型 model BasicFinanceUI Models LoginModel Content Site css rel stylesheet type text css
  • 随机字体颜色

    我需要用 2 或 3 种随机颜色为文本着色 我如何在 PHP 或 JavaScript 中执行此操作 color str pad sprintf x x x rand 0 255 rand 0 255 rand 0 255 6 rand 0
  • 使用 Gradle 在多个 Android 应用程序之间共享 Android 库

    我有 Android 应用程序 A 和 B 我想将每个应用程序中的重复代码提取到共享库 L 中 如何使用 Gradle 执行此操作 我之前见过这个问题的一些排列 但答案很少 最接近 最好的已问问题是这个 多个 Android 应用程序依赖于
  • Angular2:类型错误:无法读取未定义的属性“Symbol(Symbol.iterator)”

    我是可观察对象的新手 正在尝试 Christoph Burgdorf 的基本自动完成变体Angular2 博客中的可观察量 http blog thoughtram io angular 2016 01 07 taking advantag
  • CakePHP 中的 hasMan 简化为 hasOne

    基本上我在 CakePHP 中有以下模型 User id username Photo id user id path 我已经建立了以下关系 用户有很多照片 在一个屏幕上 我想列出用户 并在每个用户旁边显示随机照片 我尝试建立以下关系 用户
  • 如何将字符串列表转换为正确的 Python 类型?

    给定一个 python 字符串列表 如何自动将它们转换为正确的类型 意思是 如果我有 hello 3 3 64 1 我希望将其转换为列表 hello 3 3 64 1 其中第一个元素是字符串 第二个元素是 int 第三个元素是 float
  • 如何发出HTTP请求将文件从reactjs上传到googledrive?

    我对文档有点困惑 我做了我的研究 资源很少 也许有人可以帮助我 我正在使用 CRNA create react app 我有一个按钮 可以使用 URI 将文件上传到 Google Drive 我已经有了 API 密钥 客户端 ID 启用 A
  • 使用 Windows 锁定屏幕后删除 Kerberos 缓存票证

    无论如何 有没有办法阻止 Kerberos 缓存的票证在 Windows 进入锁定屏幕后被删除 首次登录 Windows 时 klist exe 显示 2 个缓存票证 但是 发生 Windows 锁屏事件后 klist exe 显示 0 个
  • C# Winform 表单中的表单

    我想打开一个表单的多个实例并将其显示在另一种表单或另一种表单的面板中 怎么做 如果您不使用 MDI 您仍然可以将一个窗体添加到另一个窗体或窗体上的面板 public Form1 InitializeComponent Form2 embed
  • Python 字典不按顺序排列

    我创建了一个字母表字典 其值从0开始 并根据单词文件增加一定的量 我对最初的字典进行了硬编码 我希望它保持按字母顺序排列 但事实并非如此 我希望它按字母顺序返回字典 基本上与初始字典保持相同 我怎样才能保持秩序 from wordData
  • NodeJS“加密”哈希似乎产生与 Crypto-JS javascript 库不同的输出

    我正在使用 NodeJS 的捆绑包crypto http nodejs org api crypto html crypto class hash服务器端 SHA256 哈希模块 在客户端 我使用一个名为的 javascript 库Cryp
  • 如何强制重装iOS模拟器?

    我想下载模拟器组件 Xcode 6 2 但在下载过程中我的互联网连接丢失了 Xcode 仍然显示我已经安装了 7 1 模拟器 你知道如何强制重装iOS模拟器吗 我已完成以下步骤 从 Library Caches com apple dt X
  • 无法在 routerOnActivate 上获取查询参数

    我在尝试使用新的路线库获取查询参数时遇到问题 VERSION2 0 0 rc 1 Problem routerOnActivate curr RouteSegment prev RouteSegment currTree RouteTree
  • 使用 pybind11 修改 std::array 的默认值

    我的目标是修改在中声明的数组C struct并赋予默认值 我读过了this https pybind11 readthedocs io en stable advanced cast stl html making opaque types