上一主题

numpy.chararray.base

下一主题

numpy.chararray.data

numpy.chararray.ctypes

chararray.ctypes

一个对象,用于简化数组与ctypes模块的交互。

此属性创建一个对象,使得在使用ctypes模块调用共享库时更容易使用数组。返回的对象包括数据,形状和步长属性(见下面的注释),它们本身返回可以用作共享库的参数的ctypes对象。

参数:

返回:

c:Python对象

拥有属性数据,形状,步幅等

也可以看看

numpy.ctypeslib

笔记

下面是这个对象的公共属性,它们被记录在“NumPy指南”中(我们省略了未记录的公共属性,以及记录的私有属性):

  • data:指向数组的内存区域的指针,为Python整数。该存储器区域可以包含未对齐的数据,或者不以正确的字节顺序。存储区域甚至可能不可写。当将此属性传递给任意C代码时,应尊重此数组的数组标志和数据类型,以避免可能包括Python崩溃的故障。用户当心!此属性的值与self._array_interface _ ['data'] [0]完全相同。
  • shape(c_intp * self.ndim):长度为self.ndim的ctypes数组,其中basetype是与此平台上的dtype('p')对应的C整数。这个基本类型可以是c_int,c_long或c_longlong,具体取决于平台。c_intp类型在numpy.ctypeslib中相应定义。ctypes数组包含基础数组的形状。
  • strides(c_intp * self.ndim):长度为self.ndim的ctypes数组,其中basetype与shape属性相同。这个ctypes数组包含来自底层数组的strides信息。这个步长信息对于显示必须跳转多少字节以获得数组中的下一个元素是重要的。
  • data_as(obj):返回转换为特定c类型对象的数据指针。例如,调用self._as_parameter_等效于self.data_as(ctypes.c_void_p)。也许你想使用数据作为指向浮点数据的ctypes数组的指针:self.data_as(ctypes.POINTER(ctypes.c_double))。
  • shape_as(obj):返回形状元组作为一些其他c类型的数组。例如:self.shape_as(ctypes.c_short)。
  • strides_as(obj):返回strides元组作为一些其他c类型的数组。例如:self.strides_as(ctypes.c_longlong)。

小心使用ctypes属性 - 特别是临时构建的数组或数组。例如,调用(a+b).ctypes.data_as(ctypes.c_void_p)会返回一个无效的指针,因为创建为(a + b)的数组在下一个Python语句之前被释放。你可以使用c=a+bct=(a+b).ctypes避免此问题。在后一种情况下,ct将保存对数组的引用,直到ct被删除或重新分配。

如果ctypes模块不可用,那么数组对象的ctypes属性仍会返回有用的信息,但不会返回ctypes对象,而是可能会出现错误。特别地,对象仍然具有as参数属性,该属性将返回等于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>