原文:https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.ctypes.html
校对:(虚位以待)
ndarray.
ctypes
一个对象,用于简化数组与ctypes模块的交互。
此属性创建一个对象,使得在使用ctypes模块调用共享库时更容易使用数组。返回的对象包括数据,形状和步长属性(见下面的注释),它们本身返回可以用作共享库的参数的ctypes对象。
参数: | 无 |
---|---|
返回: | c:Python对象
|
也可以看看
numpy.ctypeslib
笔记
下面是这个对象的公共属性,它们被记录在“NumPy指南”中(我们省略了未记录的公共属性,以及记录的私有属性):
小心使用ctypes属性 - 特别是临时构建的数组或数组。例如,调用(a+b).ctypes.data_as(ctypes.c_void_p)
会返回一个无效的指针,因为创建为(a + b)的数组在下一个Python语句之前被释放。你可以使用c=a+b
或ct=(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>