首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将C指针转换为Python numpy数组

将C指针转换为Python numpy数组
EN

Stack Overflow用户
提问于 2021-11-25 11:31:14
回答 1查看 169关注 0票数 0

我对Python中的C和ctype很陌生。

我需要将一个C指针转换为一个双重数组,并将其转换为Python数组。

我的出发点如下:

代码语言:javascript
运行
复制
import ctypes
import numpy as np
arrayPy = np.array([[0, 1, 2], [3, 4, 5]])
out_c = arrayPy.ctypes.data_as(ctypes.POINTER(ctypes.c_double))

请问如何有效地将"out_c“对象转换为Python数组?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-26 17:49:34

起点是不正确的,因为arrayPy是一个整数数组。将dtype设置为生成一个双倍数组:

代码语言:javascript
运行
复制
import ctypes
import numpy as np

arrayPy = np.array([[0, 1, 2], [3, 4, 5]], dtype=ctypes.c_double)
out_c = arrayPy.ctypes.data_as(ctypes.POINTER(ctypes.c_double))
print(out_c, out_c[:arrayPy.size])

输出是指向double的C指针。对指针进行切片将显示数据,但您需要知道数据的大小,以避免在数据结束后进行迭代:

代码语言:javascript
运行
复制
<__main__.LP_c_double object at 0x000001A2B758E3C0> [0.0, 1.0, 2.0, 3.0, 4.0, 5.0]

--我需要将一个C指针转换为一个双重数组,然后转换为Python数组。

若要将该指针转换回numpy数组,如果您知道它的形状,可以使用以下内容:

代码语言:javascript
运行
复制
a = np.ctypeslib.as_array(out_c, shape=arrayPy.shape)
print(a)

输出:

代码语言:javascript
运行
复制
[[0. 1. 2.]
 [3. 4. 5.]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70110337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档