如何使用 ctypes 接口从 C 返回包含 numpy 数组的对象?

2023-12-31

抱歉,如果这很基本,我对 ctypes/python 还很陌生。

我的目标是调用一个 C 库,生成一个包含(动态分配的)数组的对象,然后将该对象返回给 python 并将其保存在 python 数据结构中(例如,一个包含numpy 整数数组)。这是我到目前为止所拥有的:

C库相关代码:

struct footype{
   int p1;
   int *myarr;
}
footype myfun(int nx, ny, nz){
  static footype myfoo; 
  myfoo.myarr = new int[nx*ny*nz];
  myfoo.p1 = nx+ny;
  return myfoo;
}

以及相关的python代码:

import numpy as np
from ctypes import *
class Foopy(Structure):
  _fields_ = [("p1",c_int),("mat",POINTER(c_int))]
lib = cdll.LoadLibrary("./libmyfun.so")
lib.myfun.restype = Foo
myfoo = lib.myfun(10,10,10)
myobj.arr = np.ctypeslib.as_array(myfoo.mat,(10,10,10))
myobj.p1 = myfoo.p1

这名义上是有效的myobj有预期的内容。但我想知道这是否是在自找麻烦,因为来自 numpy.ctypeslib.as_array 文档:“numpy 数组与 ctypes 对象共享内存。” - 在我的例子中包含一个指针,我不清楚该内存在哪里拥有/管理。

我想我的问题是 - 有没有更好/更通用的方法来做到这一点?作为推论,如果返回的对象包含一些其他对象的动态分配数组,并且目标是将其捕获到 python 列表中,那么如果没有 ctypeslib.as_array 的魔力,这将如何工作?


None

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

如何使用 ctypes 接口从 C 返回包含 numpy 数组的对象? 的相关文章

  • Windows 程序如何临时更改其时区?

    我写了一个函数来返回time t与给定日期的午夜相对应的值 当给定日期没有午夜时 它返回最早可用的时间 例如 当埃及进入夏令时时 这种情况就可能发生 今年 时间更改于 4 月 29 日晚上午夜生效 因此时钟直接从 23 59 转到 01 0
  • Python GTK3 Treeview 向上或向下移动选择

    如何在树视图中向上或向下移动所选内容 我的想法是 我可以使用向上和向下按钮将选择向上移动一行或向下移动一行 我的 Treeview 使用 ListStore 不确定这是否重要 首先 我将使用我熟悉的 C 代码 如果您在将其翻译为 Pytho
  • 使用 Microsoft Graph 创建用户

    如何使用 Microsoft graph 创建用户 因为我在保存过程中遇到了权限失败的问题 我确实有几个问题 在图中调用创建用户 API 将在哪里创建用户 是在 Azure AD 还是其他地方 我尝试通过传递 json 和必需的标头来调用创
  • 在 C# 中生成随机值

    如何使用以下命令生成随机 Int64 和 UInt64 值RandomC 中的类 这应该可以解决问题 这是一个扩展方法 因此您可以像调用普通方法一样调用它Next or NextDouble上的方法Random目的 public stati
  • 从存储过程返回 int 值并在 ASP.NET 代码中检查它以验证登录表单

    当我多次尝试但没有得到有效结果时 使此代码运行的真实顺序是什么 SQL存储过程的代码 set ANSI NULLS ON set QUOTED IDENTIFIER ON GO ALTER PROC dbo login proc usern
  • 打破条件变量死锁

    我遇到这样的情况 线程 1 正在等待条件变量 A 该变量应该由线程 2 唤醒 现在线程 2 正在等待条件变量 B 该变量应该由线程 1 唤醒 在我使用的场景中条件变量 我无法避免这样的死锁情况 我检测到循环 死锁 并终止死锁参与者的线程之一
  • python 中的 F 字符串前缀给出语法错误[重复]

    这个问题在这里已经有答案了 我有一个名为 method 的变量 它的值是 POST 但是当我尝试运行时print f method method is used 它不断在最后一个双引号处给出语法错误 我找不到它这样做的原因 我正在使用 py
  • 如何使用 python 模块的多个 git 分支?

    我想使用 git 来同时处理我正在编写的模块中的多个功能 我目前正在使用 SVN 只有一个工作区 因此我的 PYTHONPATH 上只有该工作区 我意识到这不太理想 所以我想知道是否有人可以建议一种更 正确 的方法来做到这一点 让我用一个假
  • Unity 2.0 和处理 IDisposable 类型(特别是使用 PerThreadLifetimeManager)

    我知道类似的问题被问过好几次 例如 here https stackoverflow com questions 987761 how do you reconcile idisposable and ioc here https stac
  • 统一;随机物体移动[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在制作一款机器人战斗游戏 我希望敌人随机移动 然后有时会向敌人移动 我希望运动包含在其中的代码 else if avoid fal
  • 关闭正在运行代码的 IPython Notebook

    怎么运行的 我在 IPython Notebook 中运行了一些代码 一些迭代工作 我不小心关闭了正在运行的笔记本的浏览器 但回到 IPython 仪表板 我发现这个特定的笔记本尚未关闭 所以如果我再次打开笔记本 我会在它正在执行的代码前面
  • 无效的模板相关成员函数模板推导 - 认为我正在尝试使用 std::set

    我有一个继承自基类模板的类模板 基类模板有一个数据成员和一个成员函数模板 我想从我的超类中调用它 我知道为了消除对成员函数模板的调用的歧义 我必须使用template关键字 我必须明确引用this在超级班里 this gt base mem
  • Visual Studio 2015默认附加库

    当我在 VS 2015 中创建一个空项目时 它会自动将这些库放入 附加依赖项 中 kernel32 lib user32 lib gdi32 lib winspool lib comdlg32 lib advapi32 lib shell3
  • Crypto++ 和压缩 EC 密钥

    如何在 Crypto 中生成压缩的 ECDSA 密钥 AutoSeededRandomPool prng ECDSA
  • 将函数按元素应用于两个 DataFrame

    如何应用函数z ij f x ij y ij 来自数据框X and Y相同大小并将结果保存到 DataFrameZ 这取决于你有什么样的功能 很多功能已经被矢量化为数据框 例如 等等 所以对于这些功能 你可以简单地做Z X Y or Z X
  • 请解释为什么Java和C对此代码给出不同的答案

    public class Test public static void main String args int i 10 i i System out println value of i is i 输出是 10 当我在中执行类似的代码
  • 如何在不同的目录中执行python脚本?

    Solved对于可能觉得这有帮助的人 请参阅下面我的答案 我有两个脚本 a py 和 b py 在我当前的目录 C Users MyName Desktop MAIN 中 我运行 gt python a py 第一个脚本 a py 在我当前
  • C# 中成员访问中的问号是什么意思?

    有人可以向我解释一下以下代码中会员访问中的问号是什么意思吗 它是标准 C 的一部分吗 尝试在 Xamarin Studio 中编译此文件时出现解析错误 this AnalyzerLoadFailed Invoke this new Anal
  • 在Python中使用os.makedirs创建目录时出现权限问题

    我只是想处理上传的文件并将其写入工作目录中 该目录的名称是系统时间戳 问题是我想以完全权限创建该目录 777 但我不能 使用以下代码创建的目录755权限 def handle uploaded file upfile cTimeStamp
  • XmlDocument Save 使文件保持打开状态

    我有一个简单的 C 函数 可以创建一个基本的 XML 文件并保存 private void CreateXMlFile string Filename string Name string Company XmlDocument doc n

随机推荐

  • MsDeploy 远程处理执行清单两次

    I have 为 msdeploy 创建了一个清单以 停止 卸载 复制 安装和启动 Windows 服务 从清单创建了一个包 对远程服务器上的包执行 msdeploy 问题 它执行整个清单两次 尝试过 我修改了 waitInterval 和
  • Laravel 中的分页不起作用

    当我投入我的观点时 问题 gt 链接 我没有看到分页样式 并且该页面不像我在控制器中放入的那样每页需要 6 个帖子 我的职位控制器 类 QuestionsController 扩展控制器 Display a listing of the r
  • 为 LaTeX 编写功能的起点是什么?

    我对它很陌生 但知道它无法处理我需要的特殊东西 我想开发 LaTeX 的功能 问题 有一种东西叫做 TeX 然后是乳胶 然后是 KOMA Script 那么 这三个中的哪一个实际上是驱动所有这些东西的 底层引擎 这是 TeX TeX 不仅是
  • React-Native 中 Android 和 iOS 的图像大小

    在制作iOS应用程序时 我们通常会提供 x 2x 3x图像 根据我对 Android 的了解 大约有六种不同的尺寸 我已经开始研究react native并遇到了图像问题 我的问题是 我是否需要提供所有不同尺寸的图像 即通过结合 iOS 和
  • XML 到制表符分隔文本

    需要XML XSLT专家的帮助 我有 2 个以 XML 格式从系统导出的示例记录 如下所示 我喜欢使用 XSLT 将数据转换为制表符分隔的文本 如下所示https docs google com spreadsheet ccc key 0A
  • 查询@xml变量以获取行集

    我有一个 xml 数据 如下所示 DECLARE XmlContent XML SET XmlContent
  • 理解嵌套列表理解[重复]

    这个问题在这里已经有答案了 我想了解嵌套列表理解 下面 我列出了一个列表理解表达式及其 for 循环等效项 我想知道我的理解是否正确 例如 min row i for row in rows max row i for row in row
  • 使用 datetime64 将字符串转换为 np.array,而不是使用 Pandas

    我正在寻找一种方法 将以 YYYYmmdd 格式给出的日期转换为 dtype datetime64 的 np array 日期存储在另一个 np array 中 但 dtype float64 我正在寻找一种方法来避免熊猫来实现这一目标 我
  • 在erlang接收语句中引入“保存队列”的目的是什么

    我是 erlang 新手 正在学习 Joe Armstrong 的 Programming Erlang 教程 我对8 6中选择性接收中提到的 保存队列 感到困惑 如果消息根本不匹配 为什么不直接丢弃呢 放回邮箱以便后续处理的目的是什么 如
  • 为什么我的 Netbeans Xdebug 会话在一段时间不活动后会超时

    我喜欢 Netbeans 帮助我调试 Magento 应用程序的方式 在 Win 7 64 位上的 XAMPP 中 但我注意到连接在一段时间后似乎超时 断点不再被命中 我必须重新启动调试会话 这很烦人 关于如何延长或禁用调试超时有什么建议吗
  • Tensorflow 中的 RBF 网络有问题吗?

    我正在使用 Tensorflow 开发 RBF 网络 但在第 112 行出现此错误 内容如下 ValueError Cannot feed value of shape 40 13 for Tensor Placeholder 0 whic
  • 使用四元数平滑旋转

    四元数不仅可以描述旋转 还可以描述方向 即从初始 零 位置开始的旋转 我希望模拟从一个方向到另一个方向的平滑旋转 我计算了起始方向startOrientation和末端方向endOrientation并希望将中间方向描述为startOrie
  • 既然有String,为什么还要使用StringBuilder?

    我刚刚遇到StringBuilder第一次使用并感到惊讶 因为 Java 已经拥有非常强大的功能String允许追加的类 为什么要一秒钟String class 我在哪里可以了解更多信息StringBuilder String不允许追加 您
  • Javascript 中的几乎所有内容为何都是对象?

    我在许多 JavaScript 介绍中读到过很多这一点 我只是不明白 我始终认为对象是具有方法和属性的东西 我理解数组 因为它有键值对 字符串 或 数字 或 函数 怎么样 上面列出的这些东西对我来说似乎就像函数 这意味着你输入一些东西 你就
  • 内存映射文件、托管映射文件和偏移指针

    我对 Boost 库 适用于 Windows 的术语有点困惑 我想做的很简单 在磁盘上创建一个文件 gt 50 GB 的大文件 分别为写入和读取操作进行一些映射 例如 首先映射 1 GB 部分用于写入 然后将其刷新到硬盘驱动器并获取新部分
  • 选择下拉列表/选择列表中已选择的项目

    我已经寻找这个问题的答案很长一段时间了 但没有运气 或者最多有错误的解决方案 我面临的问题是我有一个选择元素 显然 在选择已选择的项目时不会触发 onchange 事件 像这样
  • 使用 PHPMAILER 阅读确认信息

    我尝试在使用 PHPMAILER 发送电子邮件时返回阅读确认 但它不起作用 我尝试了这些选项 对象的构造 mail new PHPMailer mail gt CharSet UTF 8 mail gt From email protect
  • Action_view 意图未在选择器中显示浏览器选项

    我正在创造和ACTION VIEW带有类似 URI 的意图https www example com somedirection https www example com somedirection 有一个应用程序 我们称之为示例应用程序
  • 如何清除我本地版本的TFS服务器知识?

    我们的构建人员在编译签入 TFS 实例的一些源代码时遇到问题 我正在做一些我还没有准备好签入的更改 因此我对本地文件夹进行了手动备份并删除了本地文件夹的内容 然后我做了 获取最新 特定版本 并覆盖 以确保我获得最新版本 并确保它已编译 确实
  • 如何使用 ctypes 接口从 C 返回包含 numpy 数组的对象?

    抱歉 如果这很基本 我对 ctypes python 还很陌生 我的目标是调用一个 C 库 生成一个包含 动态分配的 数组的对象 然后将该对象返回给 python 并将其保存在 python 数据结构中 例如 一个包含numpy 整数数组