C/C++向量到Numpy数组的快速转换

2024-02-17

我使用 SWIG 将一些 C++ 代码粘合到 Python (2.6),并且该粘合的一部分包括一段代码,该代码将大型数据字段(数百万个值)从 C++ 端转换为 Numpy 数组。我能想到的最好方法是为类实现一个迭代器,然后提供一个 Python 方法:

def __array__(self, dtype=float):
    return np.fromiter(self, dtype, self.size())

问题是每个迭代器next调用的成本非常高,因为它必须经过大约三到四个 SWIG 包装器。这需要太长的时间。我可以保证 C++ 数据是连续存储的(因为它们位于 std::vector 中),并且感觉 Numpy 应该能够获取指向该数据开头的指针以及它包含的值的数量,并且直接阅读。

有没有办法传递一个指针internal_data_[0]和价值internal_data_.size()到 numpy 以便它可以直接访问或复制数据而无需所有 Python 开销?


你会想要定义__array_interface__() instead http://docs.scipy.org/doc/numpy/reference/arrays.interface.html?highlight=__array_interface__#__array_interface__。这将让您直接传回指针和形状信息。

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

C/C++向量到Numpy数组的快速转换 的相关文章

随机推荐

  • 等待 Cypress 中未覆盖的元素

    我收到错误 imed out retrying cy click failed because this element a class icon href home a is being covered by another elemen
  • 当响应为比例时的逻辑回归(使用 JAGS)

    我试图在 JAGS 中拟合逻辑回归模型 但我的数据格式为 success y attempts n 而不是二进制变量 在 R 中 可以通过使用 glm y n 和 权重 参数来将模型拟合到此类数据 但我不确定如何将其拟合到 JAGS 中 这
  • android.support.test.espresso.NoActivityResumedException:恢复阶段没有活动

    我正在尝试为我的活动编写测试用例 我有多项活动 其中一项活动没有问题 但当我尝试在其他活动上运行测试时出现以下错误ActivityTest类 android support test espresso NoActivityResumedEx
  • Docker 服务启动失败

    重启虚拟机后命令docker 图片命令显示错误 Cannot connect to the Docker daemon at unix var run docker sock Is the docker daemon running 看来d
  • 在 SQL Server 2005 中对非常大的结果集进行分页的有效方法是什么?

    EDIT 我仍在等待更多答案 谢谢 在 SQL 2000 时代 我曾经使用临时表方法 使用新的标识列和主键创建临时表 然后选择 A 和 B 之间的标识列 When SQL 2005我来了之后发现了Row Number 从那时起我就一直在使用
  • 如何将API网关与内部ALB集成

    根据https docs aws amazon com apigateway latest developerguide http api develop integrations private html https docs aws a
  • 中止 WebClient.DownloadFileAsync 操作

    安全取消 DownloadFileAsync 操作的最佳方法是什么 我有一个线程 后台工作人员 它启动下载并管理它的其他方面 当我看到该线程有时我结束CancellationPending true 开始下载后 线程将静止并旋转 直到下载完
  • 简单的按键绑定无法按预期工作

    I m trying to bind ctrl x to editor action clipboardCutAction cut but with the condition that it is only invoked when te
  • 如何在ios上正确格式化货币

    我正在寻找一种在不使用 TextField hack 的情况下将字符串格式化为货币的方法 例如 我想将数字 521242 转换为 5 212 42 或者 如果我有一个低于 1 美元的数字 我希望它看起来像这样 52 gt 0 52 Than
  • 用户控件的 BeginUpdate() EndUpdate

    我写了一个用户控制其行为就像容器控制 但完全是由 WindowsForms 绘制的 我继承自UserControl 我想避免在填充控件时绘制控件 因此我需要编写类似于BeginUpdate EndUpdate 当控件是用户绘制的时 这很容易
  • Android:无法添加窗口 - 令牌 null 不适用于应用程序[重复]

    这个问题在这里已经有答案了 可能的重复 Android 1 6 android view WindowManager BadTokenException 无法添加窗口 令牌 null 不适用于应用程序 https stackoverflow
  • 将 MySQL 表恢复到数据库

    我在从命令行将 MySQL 表恢复到数据库时遇到问题 备份表可以使用mysqldump 备份和恢复数据库也可以正常工作 我用过了 mysql uroot p 数据库名 表名 提前致谢 啊 我想我在这里看到了问题 您的备份脚本看起来不错 tb
  • SPServices.SPCascadeDropdowns 未正确级联

    我有三个 SharePoint 2016 列表 组织机构 部门 Groups 组按部门排序 部门按组织排序 每个列表中的标题字段用于组 组织或部门的名称 每个列表中都有一个下拉列表 用于选择相应项目的父级 在我的一个表单中 用户应该选择拥有
  • Google 站点 API,RedirectRequiredException 之后的 IllegalArgumentException(“尝试设置外部 cookie”)

    我正在使用 gdata media 1 0 1 47 1 jar 功能通过 com google gdata client media MediaService getMedia IMediaContent mediaContent 方法获
  • 与 Enterprise Library 4.1 的单声道兼容性

    有人在 mono 中使用最新的企业库 4 1 吗 我使用 Mono 迁移分析器来分析我的 Web 应用程序 并意识到所有企业库 DLL 在 Mono 中都失败了 我需要知道企业库 4 1 与 Mono 2 4 不兼容是真的吗 我有这方面的更
  • C# - 如何解析文本文件(空格分隔的数字)?

    给定一个由空格分隔的数据文件 10 10 10 10 222 331 2 3 3 4 45 4 2 2 4 如何读取该文件并加载到数组中 谢谢 var fileContent File ReadAllText fileName var ar
  • Electron:如何安全地将全局变量注入BrowserWindow / BrowserView?

    我想使用 Electron 加载外部网页BrowserView 它的 API 几乎与BrowserWindow const currentWindow remote getCurrentWindow const view new remot
  • CSS 平铺背景图像的最佳尺寸

    人们经常说 当使用背景图像平铺网页背景时 尺寸较大的图像的性能会更好 因为它需要平铺的频率较低 一段时间以来 我一直将它们设为 8x8 像素 或 8 的倍数 但是是否有人有数据链接来证明在各种浏览器中都是这种情况 考虑渲染时间或页面渲染各个
  • ltrace()如何显示rand()

    当 ltrace 命中 rand 函数时 它会显示 4 个参数 如下所示 兰特 0 0x5649bd4e6010 0x7f0955490760 0x7f09551cf7b0 0x17382962 rand 不接受任何参数 ltrace 这里
  • C/C++向量到Numpy数组的快速转换

    我使用 SWIG 将一些 C 代码粘合到 Python 2 6 并且该粘合的一部分包括一段代码 该代码将大型数据字段 数百万个值 从 C 端转换为 Numpy 数组 我能想到的最好方法是为类实现一个迭代器 然后提供一个 Python 方法