一个用于简化数组与ctypes模块的交互的对象。
此属性创建一个对象,使使用ctypes模块调用共享库时更易于使用数组。返回的对象除其他外,还具有数据,形状和步幅属性(请参阅下面的注释),它们本身返回ctypes对象,这些对象可用作共享库的参数。
参数:None:
返回值:c: : Python对象
拥有属性数据,形状,步幅等
注意:
以下是在“Guide to NumPy”中记录的该对象的公共属性(我们省略了未记录的公共属性以及已记录的私有属性):
_ctypes.data
以Python整数形式指向数组存储区的指针。该存储区可能包含未对齐或字节顺序不正确的数据。该存储区甚至可能无法写入。当将此属性传递给任意的C-code时,应考虑该数组的数组标志和数据类型,以避免可能导致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数组,其中基类型是C-integer,对应于dtype('p')在这个平台上。这个base-type可能是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(自, 对象)[源代码]
返回转换为特定c-types对象的数据指针。例如,打电话self._as_parameter_相当于self.data_as(ctypes.c_void_p)。也许您想将数据用作指向浮点数据的ctypes数组的指针:self.data_as(ctypes.POINTER(ctypes.c_double))。
返回的指针将保留对该数组的引用。
_ctypes.shape_as(自, 对象)[源代码]
返回形状元组作为其他c-types类型的数组。例如:self.shape_as(ctypes.c_short)。
_ctypes.strides_as(自, 对象)[源代码]
以其他c-types类型的数组形式返回步幅元组。例如:self.strides_as(ctypes.c_longlong)。
如果ctypes模块不可用,则数组对象的ctypes属性仍返回有用的内容,但不会返回ctypes对象,而可能会引发错误。特别是,该对象仍将具有as_parameter属性,它将返回一个等于数据属性的整数。
例子:
>>> import ctypes
>>> x
array([[0, 1],
[2, 3]])
>>> x.ctypes.data
30439712
>>> x.ctypes.data_as(ctypes.POINTER(ctypes.c_long))
>>> 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
>>> x.ctypes.shape_as(ctypes.c_long)
>>> x.ctypes.strides
>>> x.ctypes.strides_as(ctypes.c_longlong)