numpy.core.defchararray.chararray.ctypes¶
属性
-
chararray.
ctypes
¶ 简化数组与CTypes模块交互的对象。
此属性创建一个对象,使在使用ctypes模块调用共享库时更容易使用数组。返回的对象具有数据、形状和跨步属性(参见下面的注释),这些属性本身返回可用作共享库参数的CTypes对象。
参数: - None
返回: - c : Python对象
具有属性数据、形状、步幅等。
笔记
以下是“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数组,其中basetype是对应于
dtype('p')
在这个平台上。此基类型可以是ctypes.c_int
,ctypes.c_long
或ctypes.c_longlong
取决于平台。C_intp类型在中进行了相应的定义。numpy.ctypeslib
. CTypes数组包含基础数组的形状。
-
_ctypes.
strides
¶ (c intp*self.ndim):长度为self.ndim的ctypes数组,其中basetype与shape属性相同。此CTypes数组包含来自基础数组的跨步信息。这个跨步信息对于显示必须跳跃多少字节才能到达数组中的下一个元素非常重要。
-
_ctypes.
data_as
(obj)[源代码]¶ 将数据指针转换返回到特定的C类型对象。例如,调用
self._as_parameter_
等于self.data_as(ctypes.c_void_p)
. 也许您希望使用数据作为指向浮点数据的CTypes数组的指针:self.data_as(ctypes.POINTER(ctypes.c_double))
.返回的指针将保留对数组的引用。
如果ctypes模块不可用,那么array对象的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>