访问 ctypes 结构中的 np.array

2024-04-21

我有一个带有动态分配数组的 ctypes 结构,即:

array_1d_double=npct.ndpointer(dtype=np.double,ndim=1,
                               flags='CONTIGUOUS')
class Test(Structure):
    _fields_ = ("x", array_1d_double, ..)

test = Test()
do_some_init_in_c(  for example malloc)

如果我打印 test.x 我会得到以下输出:

<ndpointer_<f8_1d_CONTIGUOUS object at 0x7f104dc0c3b0>

c 结构大致如下所示,

structure Test_s{
    double *x;....
};

如何像 numpy 数组一样访问这个元素? 是否可能需要将数组分配为 np.arrays 而不是使用 malloc?执行此操作的正确方法是什么?


执行您所说的操作的一种方法是直接在 python 端分配 numpy 数组,并在 C 端表现得像一个直接的双精度数组。

import numpy as np
import ctypes as C

# allocate this as a normal numpy array with specified dtype
array_1d_double = np.array([1,2,3,4,5],dtype="float64")

# set the structure to contain a C double pointer
class Test(C.Structure):
    _fields_ = [("x", C.POINTER(C.c_double))]

# Instantiate the structure so it can be passed to the C code
test = Test(np.ctypeslib.as_ctypes(array_1d_double))

# You can also do:
# test = Test()
# test.x = np.ctypeslib.as_ctypes(array_1d_double)

print test.x
# outputs: <__main__.LP_c_double object at 0x1014aa320>

您现在应该能够使用该结构的x成员作为 C 代码中的普通双精度数组。

EDIT:

澄清一下:如果你实例化一个Structure没有参数,它提供了NULL为其所有成员提供指导。

class Test(C.Structure):
    _fields_ = [("x", C.POINTER(C.c_double)),
                ("y", C.POINTER(C.c_int))]

test = Test()
print test.x
# outputs: <__main__.LP_c_double object at 0x1014aa320>

print test.y
# outputs: <__main__.LP_c_int object at 0x101429320>

print test.x[0]
# raises ValueError: NULL pointer access

print test.y[0]
# raises ValueError: NULL pointer access

如果使用 N 个参数实例化结构,这些参数将分配给结构的前 N ​​个成员。

test = Test(np.ctypeslib.as_ctypes(array_1d_double))

print text.x[0]
# outputs: 1.0

print test.y[0]
# raises ValueError: NULL pointer access

EDIT2

如果您想将 numpy 数组永久绑定到您的结构,您可以覆盖__init__ method:

class MyDualArrayStruct(C.Structure):
    _fields_ = [("c_x", C.POINTER(C.c_double)),
                ("c_y", C.POINTER(C.c_int))]

    def __init__(self,*args,**kwargs):
        super(MyDualArrayStruct,self).__init__(*args,**kwargs)
        self.np_x = np.array([1,2,3,4,5],dtype="float64")
        self.c_x = np.ctypeslib.as_ctypes(self.np_x)
        self.np_y = np.array([5,4,3,2,1],dtype="int32")
        self.c_y = np.ctypeslib.as_ctypes(self.np_y)

test = MyDualArrayStruct()

print test.np_x
print test.c_x[:5]

# Note that here c_x and np_x both contain the same data. Thus modifying one of them
# (inplace) modifies the other. You can use this to do easy inplace modification of 
# numpy arrays in C functions.
# This implies that test.np_x.sum() is also the sum of test.c_x
test.np_x[:] = 1

print test.np_x
print test.c_x[:5]

这输出:

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

访问 ctypes 结构中的 np.array 的相关文章

  • 如何在anaconda python 3.6上安装tensorflow

    我使用 anaconda 包安装了新版本的 python 3 6 但是我无法安装张量流 总是收到这样的错误 tensorflow gpu 1 0 0rc2 cp35 cp35m win amd64 whl 在此平台上不受支持 如何在 ana
  • 如何从 Windows 7 PC 上完全卸载 Python 2.7

    从这里安装了Python 2 7 https www python org downloads release python 279 https www python org downloads release python 279 然后我
  • 绘制对数轴

    我想使用 matplotlib 绘制一张带有一个对数轴的图 我一直在阅读文档 但无法弄清楚语法 我知道这可能很简单 scale linear 在情节争论中 但我似乎无法正确理解 示例程序 import pylab import matplo
  • NLTK:包错误?朋克和泡菜?

    基本上 我不知道为什么会收到此错误 只是为了获得更多图像 这里有一个代码格式的类似消息 由于是最新的 该帖子的答案已经在消息中提到 Preprocessing raw texts LookupError Traceback most rec
  • 如何使用 django Rest 框架保存多对多字段对象

    我有博客 发布 标签三个模型 在博客模型中 我将字段 postedin 作为发布模型的外键 将 标签 作为标签模型的许多字段 模型 py class Posted models Model name models CharField Pos
  • 如何使用格式保存 Tkinter 文本小部件的内容

    我在 python 中使用 Tkinter 在文本窗口中显示输出 我发现使用 get 功能我可以从此窗口检索文本内容 但我有用不同背景颜色标记的文本部分 是否可以将内容与这些颜色一起复制到文件 例如 html 或 doc 中 没有对你想要的
  • 在 Python 中倾斜数组

    我有一个 2D 数组 我将使用它保存为灰度图像scipy misc toimage 在此之前 我想将图像倾斜给定角度 像这样进行插值scipy ndimage interpolation rotate 上图只是为了说明倾斜过程 我知道我必须
  • seaborn 箱线图的子图

    我有一个像这样的数据框 import seaborn as sns import pandas as pd pylab inline df pd DataFrame a one one two two one two one one one
  • 统计Sweep算子的Python实现

    我正在学习一些用书中缺失的数据进行统计的技术 缺失数据的统计分析作者 利特尔和鲁宾 对于处理单调无响应数据来说 一个特别有用的函数是扫频操作员 详情见第 148 151 页 我知道 R 模块gmm有swp函数可以做到这一点 但我想知道是否有
  • 使用 python boto3 管理 Route53 中具有多个 IP 的 A 记录

    我的route53中有一条A记录 后面有多个IP 例子 A record dummy xyz com 点IPs 1 1 1 1 2 2 2 2 和 3 3 3 3路由策略 Simple 我使用下面的代码来更新单个 IP 的记录 Change
  • pandas groupby 并转换为 json 列表

    我有一个如下所示的 pandas 数据框 idx f1 f2 f3 1 a a b 2 b a c 3 a b c 87 e e e 我需要将其他列转换为基于索引列的字典列表 所以 最终结果应该是 idx features 1 f1 a f
  • 无法使用 wxPython 打开在 folium 中生成的本地 HTML 文件

    我目前正在尝试将 GPS 坐标绘制为地图上的标记 并在 wxPython 中显示结果 我使用 folium 绘制坐标标记并生成 HTML 文件 import folium fmap folium Map 43 5321 172 6362 z
  • 在 Python 中通过网络发送对象的最佳方式是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我需要通过网络发送对象 我将使用 Twisted 并且我刚刚开始查看它的文档 据我所知 python实现套接字的唯一方式是通过文本 那么我如何使
  • Python:两个列表之间的成对比较:列表 a >= 列表 b?

    如果我想检查列表中的所有元素 a 1 2 3 6 大于或等于另一个列表中对应的元素 b 0 2 3 5 如果 a i gt b i 对于所有i的 则返回 true 否则返回 false 这有逻辑功能吗 比如a gt b 谢谢 你可以这样做
  • 在解析器/子解析器的开头使用 argparse.REMAINDER

    我想实现一个 arg 解析器 它允许我将单元测试作为子命令之一运行 盲目地将参数传递给 unittest main 例如 foo py unittest args to pass to unittest main 以及其他子命令 foo p
  • 获取列的 [0, x] 元素的最小值

    我需要计算一列 其中值是对其他列进行矢量化运算的结果 df new col df col1 min 0 df col2 然而 事实证明我不能像上面的语法一样使用 min 那么 获得 pandas 列的零和给定值之间的最小值的正确方法是什么
  • 启动客户端时,代码要求提供电话/机器人令牌

    使用 Telethon 库运行我的第一个代码时 它要求提供机器人令牌 这是实际的代码 from telethon import TelegramClient events sync api id 1234567 api hash xxxxx
  • Django - 渲染到字符串无法加载 CSS

    我正在尝试使用 Django 1 8 render to string 通过管理命令将 html 转换为 pdf 而不是使用 View request 以下代码可以将模板转换为 pdf 但它无法将 CSS 加载到模板中 def html t
  • 在不同进程之间共享列表?

    我有以下问题 我编写了一个函数 它将列表作为输入 并为列表中的每个元素创建一个字典 然后我想将这本字典附加到一个新列表中 这样我就得到了一个字典列表 我正在尝试为此生成多个进程 我的问题是 我希望不同的进程访问由其他进程更新的字典列表 例如
  • 如何通过解析导入来组合并获取单个 Python 文件

    我正在尝试获取单个 Python 文件作为输出 我有一个 Python 脚本 其中有多个此类导入 from that import sub 导入来自所有本地模块 而不是来自系统或 Python 库 有什么方法可以解决这些问题并获得一个完整的

随机推荐

  • 如何使用 javascript 将 svg use 元素插入 svg 组?

    我有一个 svg 文件 其中包含一个具有单行元素的组 我可以利用use元素并在我想要的任何位置制作多个参考副本 但是 我想使用 javascript 来添加和删除use动态元素 有没有办法使用javascript插入svguse我的行元素进
  • jquery悬停图像淡入淡出交换

    我已经在网上搜索了一段时间 试图找到编写 jquery 脚本的最佳方法来完成这个简单的任务 用优雅的淡入淡出效果交换悬停时的图像 我找到了很多解决方案 有些方法很麻烦和笨重 并将其缩小到我认为最好的两个 http designwoop co
  • 属性绑定与属性插值

    我读过一篇关于属性和属性绑定之间差异的文章 据我了解 大多数时候 Angular2 更喜欢属性绑定 因为每次数据更改后 DOM 都会更新 如果我错了 请纠正我 我有一个自定义组件并从父组件中使用它 其中 我有一个 Input named t
  • 在构建 Docker 镜像之前如何对 GitLab 的容器注册表进行身份验证?

    我有一个私有的 GitLab 项目 其中包含用于构建和推送 Docker 映像的管道 因此我必须首先向 GitLab 的 Docker 注册表进行身份验证 Research I read 使用 GitLab CI CD 对容器注册表进行身份
  • 尝试从 Visual Studio 发布 azure 函数时出错

    当我尝试使用 Visual Studio 发布函数时收到以下错误消息 知道如何解决此问题吗 System AggregateException 发生一个或多个错误 gt System Exception 发布遇到错误 我们无法 确定错误原因
  • R:ggplot2 条形图和误差条

    自从新版本的 ggplot2 0 9 3 开始 我在绘制带有误差条的条形图时遇到了问题 所以我有一个像这样的数据框 group N val sd se ci 1 206 3 37 2269533 7 9688645 4 6008261 19
  • 带有 HTML5 音频标签的自定义一键播放器

  • 如何让 Typescript 抛出运行时错误?

    import Component from angular core Component selector app root templateUrl app component html styleUrls app component cs
  • SQL 更新查询 - 聚合可能不会出现在 UPDATE 语句的集合列表中

    我正在尝试编写一个查询 用 HOLIDAY DATE TABLE 中最高的主键值 HID 更新 tbl8 update transactions HID 字段 其中为空 我收到以下错误 聚合可能不会出现在 UPDATE 语句的集合列表中 我
  • MySQL 字符串替换

    我有一列包含 url id url http www example com articles updates 43 http www example com articles updates 866 http www example co
  • 通过样式更改 Android 对话框按钮文本大小

    我正在尝试通过样式放大所有应用程序对话框按钮上的文本大小 以下代码将更改按钮背景颜色 甚至更改文本大小写 但由于某种原因 textSize 项目不受支持
  • 使用soapUI中的Groovy teststep将请求/响应文件存储在本地目录中

    通过soapUI中的常规测试步骤 我希望所有请求和响应文件都存储在具有系统日期的本地目录中 SoapUI 中的常规测试步骤 def name context expand Input TG def locatie context expan
  • jQuery - 从 JSON Stringify 获取值

    我有一个表格 我需要从中获取值 var formConfig JSON stringify bookingform serializeArray 返回如下 name client id value 1 name consignee id v
  • 如何以编程方式访问 Silverlight FrameworkElement 的 ToolTipService?

    我们有一种语言机制 可以在加载 XAML 页面时递归遍历它们 检查每个元素的 Tag 属性 并使用其值来检索要应用于该元素的字符串资源 它目前不支持工具提示 我们必须在每个页面上都有特定的代码才能将语言资源应用于它们 我正在尝试将此功能添加
  • 没有公钥,GitLab 无法克隆公共存储库

    使用亚搏体育appGitLab 6 8 2 我可以以匿名方式克隆公共存储库吗 我的用户命名空间中的存储库标记为public 如果没有在 GitLab 中保存公钥 我就无法克隆它 例如 gt ssh T email protected cdn
  • svn 外部...是或否?

    我在这里读到了一些谴责使用 svn externals 的答案 我确实看到它们如何被滥用 这确实使我们更加依赖 Subversion 但我真的不认为我们的团队会很快放弃它 无论如何 这就是我的困境 我们的解决方案引用了多个项目 这些项目位于
  • 如何将 numpy 数组分成更小的块/批次,然后迭代它们

    假设我有这个 numpy 数组 1 2 3 4 5 6 7 8 9 10 11 12 我想将其分成两批 然后迭代 1 2 3 Batch 1 4 5 6 7 8 9 Batch 2 10 11 12 最简单的方法是什么 EDIT 我很抱歉我
  • 在笑话单元测试角度中显示正确的错误

    我正在 NX 角度工作区中编写单元测试 有时它会给出这样的错误 node 15320 UnhandledPromiseRejectionWarning TypeError Converting circular structure to J
  • 什么是可堆叠修改?

    我读过一本关于 Scala 的书 里面提到了可堆叠修改 using traits 什么是可堆叠修改它们的用途是什么 区分可堆叠修改 无论如何在 scala 中使用该术语 的基本品质是 super 根据特征的混合方式动态受到影响 而一般来说
  • 访问 ctypes 结构中的 np.array

    我有一个带有动态分配数组的 ctypes 结构 即 array 1d double npct ndpointer dtype np double ndim 1 flags CONTIGUOUS class Test Structure fi