numpy.char.chararray.ctypes

属性

char.chararray.ctypes

简化数组与CTypes模块交互的对象。

此属性创建一个对象,使在使用ctypes模块调用共享库时更容易使用数组。返回的对象具有数据、形状和跨步属性(参见下面的注释),这些属性本身返回可用作共享库参数的CTypes对象。

参数
None
返回
cPython对象

具有属性数据、形状、步幅等。

笔记

以下是“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_intctypes.c_longctypes.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.shape_as(obj)[源代码]

将形状元组作为其他C类型的数组返回。例如: self.shape_as(ctypes.c_short) .

_ctypes.strides_as(obj)[源代码]

以其他C类型的数组形式返回steps元组。例如: self.strides_as(ctypes.c_longlong) .

如果ctypes模块不可用,那么数组对象的ctypes属性仍然返回有用的内容,但是ctypes对象不会返回,而是可能引发错误。特别是,对象仍将具有 as_parameter 属性,该属性将返回一个等于数据属性的整数。

实例

>>> import ctypes
>>> x = np.array([[0, 1], [2, 3]], dtype=np.int32)
>>> x
array([[0, 1],
       [2, 3]], dtype=int32)
>>> x.ctypes.data
31962608 # may vary
>>> x.ctypes.data_as(ctypes.POINTER(ctypes.c_uint32))
<__main__.LP_c_uint object at 0x7ff2fc1fc200> # may vary
>>> x.ctypes.data_as(ctypes.POINTER(ctypes.c_uint32)).contents
c_uint(0)
>>> x.ctypes.data_as(ctypes.POINTER(ctypes.c_uint64)).contents
c_ulong(4294967296)
>>> x.ctypes.shape
<numpy.core._internal.c_long_Array_2 object at 0x7ff2fc1fce60> # may vary
>>> x.ctypes.strides
<numpy.core._internal.c_long_Array_2 object at 0x7ff2fc1ff320> # may vary