Numpy:从指针数组中检索数组

Numpy:从指针数组中检索数组,numpy,ctypes,Numpy,Ctypes,我正在写一段代码,在这里我创建了一个numpy指针数组。它们指向其他阵列 我可以成功地(没有生成异常)将指针存储在指针数组的一个元素中。但我无法将此指针重新转换为numpy数组 当指针存储在一个numpy指针数组中时,问题就特别出现了。当我将指针存储在普通pyhon变量中时,我可以成功地存储和检索数组 注意,由于性能原因,我不能仅仅创建一个python指针列表 此代码适用于: 而v将返回ic中设置的初始数组 此代码不起作用: 最后一行将给出以下例外情况: File "/opt/inte

我正在写一段代码,在这里我创建了一个numpy指针数组。它们指向其他阵列

我可以成功地(没有生成异常)将指针存储在指针数组的一个元素中。但我无法将此指针重新转换为numpy数组

当指针存储在一个numpy指针数组中时,问题就特别出现了。当我将指针存储在普通pyhon变量中时,我可以成功地存储和检索数组

注意,由于性能原因,我不能仅仅创建一个python指针列表

此代码适用于: 而
v
将返回
ic
中设置的初始数组

此代码不起作用: 最后一行将给出以下例外情况:

File "/opt/intel/intelpython3/lib/python3.5/ctypes/__init__.py", line 484, in cast
return _cast(obj, obj, typ)
ctypes.ArgumentError: argument 1: <class 'TypeError'>: wrong type
File”/opt/intel/intelpython3/lib/python3.5/ctypes/_init__.py”,第484行,强制转换
返回式铸造(obj,obj,典型)
ctypes.ArgumentError:参数1::错误类型

问题:如何从指针的numpy数组存储和检索numpy数组?

对数组进行索引将返回一个
np.int32
对象,而不是本机Python
int

In [118]: type(pointer)
Out[118]: int
In [119]: type(pointers[0])
Out[119]: numpy.int32
使用
提取整数:

In [120]: type(pointers[0].item())
Out[120]: int
您还可以首先将数组转换为列表

In [121]: type(pointers.tolist()[0])
Out[121]: int
指针
在构造时,它是一个
np.int32
dtype

In [123]: pointers = numpy.zeros(5, dtype=ctypes.POINTER(ctypes.c_int))
In [124]: pointers.dtype
Out[124]: dtype('int32')
或者创建一个对象数据类型数组

In [125]: pointers = numpy.zeros(5, dtype=object)
In [126]: pointers[0] = pointer
In [127]: pointers
Out[127]: array([157379928, 0, 0, 0, 0], dtype=object)
In [128]: type(pointers[0])
Out[128]: int

对数组进行索引将返回一个
np.int32
对象,而不是本机Python
int

In [118]: type(pointer)
Out[118]: int
In [119]: type(pointers[0])
Out[119]: numpy.int32
使用
提取整数:

In [120]: type(pointers[0].item())
Out[120]: int
您还可以首先将数组转换为列表

In [121]: type(pointers.tolist()[0])
Out[121]: int
指针
在构造时,它是一个
np.int32
dtype

In [123]: pointers = numpy.zeros(5, dtype=ctypes.POINTER(ctypes.c_int))
In [124]: pointers.dtype
Out[124]: dtype('int32')
或者创建一个对象数据类型数组

In [125]: pointers = numpy.zeros(5, dtype=object)
In [126]: pointers[0] = pointer
In [127]: pointers
Out[127]: array([157379928, 0, 0, 0, 0], dtype=object)
In [128]: type(pointers[0])
Out[128]: int