gpt4 book ai didi

python - 如何从指针创建 n-dim numpy 数组?

转载 作者:太空狗 更新时间:2023-10-30 00:29:49 26 4
gpt4 key购买 nike

我读过有关 numpy.frombuffer 的内容,但找不到任何方法从指针创建数组。

最佳答案

正如上面评论中指出的,您可以使用 numpy.ctypeslib.as_array:

numpy.ctypeslib.as_array(obj, shape=None)

Create a numpy array from a ctypes array or a ctypes POINTER. The numpy array shares the memory with the ctypes object.

The size parameter must be given if converting from a ctypes POINTER. The size parameter is ignored if converting from a ctypes array

那么让我们模拟一个 C 函数,通过调用 malloc 返回一个指针:

import ctypes as C
from ctypes.util import find_library
import numpy as np

SIZE = 10

libc = C.CDLL(find_library('c'))
libc.malloc.restype = C.c_void_p

# get a pointer to a block of data from malloc
data_pointer = libc.malloc(SIZE * C.sizeof(C.c_int))
data_pointer = C.cast(data_pointer,C.POINTER(C.c_int))

您现在可以使该指针指向的数据可用于 numpy

new_array = np.ctypeslib.as_array(data_pointer,shape=(SIZE,))

并证明他们正在访问相同的内存:

new_array[:] = range(SIZE)

print "Numpy array:",new_array[:SIZE]
print "Data pointer: ",data_pointer[:SIZE]

应该输出:

Numpy array: [0 1 2 3 4 5 6 7 8 9]
Data pointer: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

最后请记住,numpy 数组不拥有自己的内存,因此需要显式调用 free 以避免内存泄漏。

del new_array
libc.free(data_pointer)

关于python - 如何从指针创建 n-dim numpy 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23930671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com