NumPy参考 >数组对象 >Masked arrays >Constants of the numpy.ma module > numpy.ma.MaskedArray.ctypes
属性
MaskedArray.
ctypes
¶一个用于简化数组与ctypes模块的交互的对象。
此属性创建一个对象,使使用ctypes模块调用共享库时更易于使用数组。返回的对象除其他外还具有数据,形状和步幅属性(请参见下面的注释),它们本身返回ctypes对象,这些对象可用作共享库的参数。
拥有属性数据,形状,步幅等
也可以看看
笔记
以下是在“ NumPy指南”中记录的该对象的公共属性(我们省略了未记录的公共属性以及已记录的私有属性):
_ctypes.
data
指向数组内存区域的指针,为Python整数。此存储区可能包含未对齐或字节顺序不正确的数据。该存储区甚至可能无法写入。在将此属性传递给任意C代码时,应考虑该数组的数组标志和数据类型,以避免可能导致Python崩溃的麻烦。用户当心!此属性的值与完全相同self._array_interface_['data'][0]
。
请注意,不同于data_as
,引用不会保留到数组:像这样的代码将导致指向已释放数组的指针,并且应拼写为
ctypes.c_void_p((a + b).ctypes.data)
(a + b).ctypes.data_as(ctypes.c_void_p)
_ctypes.
shape
(c_intp * self.ndim):长度为self.ndim的ctypes数组,其中基类型是dtype('p')
此平台上对应的C整数。该基地型可能是ctypes.c_int
,ctypes.c_long
或
ctypes.c_longlong
根据不同的平台上。在中相应地定义了c_intp类型numpy.ctypeslib
。ctypes数组包含基础数组的形状。
_ctypes.
strides
(c_intp * self.ndim):长度为self.ndim的ctypes数组,其基本类型与shape属性的相同。此ctypes数组包含来自基础数组的步幅信息。此步幅信息对于显示必须跳转多少字节才能到达数组中的下一个元素很重要。
_ctypes.
data_as
(self,obj )[源代码]返回转换为特定c类型对象的数据指针。例如,调用self._as_parameter_
等效于
self.data_as(ctypes.c_void_p)
。也许您想将数据用作指向浮点数据的ctypes数组的指针:
self.data_as(ctypes.POINTER(ctypes.c_double))
。
返回的指针将保留对该数组的引用。
_ctypes.
shape_as
(self,obj )[源代码]返回形状元组,作为其他一些c型类型的数组。例如:self.shape_as(ctypes.c_short)
。
_ctypes.
strides_as
(self,obj )[源代码]以其他c型类型的数组形式返回步幅元组。例如:self.strides_as(ctypes.c_longlong)
。
如果ctypes模块不可用,则数组对象的ctypes属性仍返回有用的内容,但不会返回ctypes对象,而可能会引发错误。特别是,对象仍将具有as_parameter
属性,该属性将返回等于data属性的整数。
例子
>>> import ctypes
>>> x
array([[0, 1],
[2, 3]])
>>> x.ctypes.data
30439712
>>> x.ctypes.data_as(ctypes.POINTER(ctypes.c_long))
<ctypes.LP_c_long object at 0x01F01300>
>>> x.ctypes.data_as(ctypes.POINTER(ctypes.c_long)).contents
c_long(0)
>>> x.ctypes.data_as(ctypes.POINTER(ctypes.c_longlong)).contents
c_longlong(4294967296L)
>>> x.ctypes.shape
<numpy.core._internal.c_long_Array_2 object at 0x01FFD580>
>>> x.ctypes.shape_as(ctypes.c_long)
<numpy.core._internal.c_long_Array_2 object at 0x01FCE620>
>>> x.ctypes.strides
<numpy.core._internal.c_long_Array_2 object at 0x01FCE620>
>>> x.ctypes.strides_as(ctypes.c_longlong)
<numpy.core._internal.c_longlong_Array_2 object at 0x01F01300>