numpy.ma.MaskedArray.ctypes#
属性
- ma.MaskedArray.ctypes#
一个对象,用于简化数组与 ctypes 模块的交互。
此属性创建一个对象,方便在使用 ctypes 模块调用共享库时使用数组。返回的对象包含 data、shape 和 strides 等属性(参见下面的“备注”),这些属性本身会返回可作为共享库参数的 ctypes 对象。
- 参数:
- 无
- 返回:
- cPython 对象
拥有 data、shape、strides 等属性。
另请参阅
备注
以下是此对象的公共属性,它们已在“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 数组,其基本类型是此平台上对应于
dtype('p')
的 C 整数(参见c_intp
)。根据平台不同,此基本类型可以是ctypes.c_int
、ctypes.c_long
或ctypes.c_longlong
。该 ctypes 数组包含底层数组的形状。
- _ctypes.strides
(c_intp*self.ndim): 一个长度为 self.ndim 的 ctypes 数组,其基本类型与 shape 属性相同。该 ctypes 数组包含底层数组的步幅信息。此步幅信息对于指示在数组中跳过多少字节才能到达下一个元素非常重要。
- _ctypes.data_as(obj)[source]
将数据指针转换为特定的 c-types 对象。例如,调用
self._as_parameter_
等同于self.data_as(ctypes.c_void_p)
。也许您想将数据用作指向 ctypes 浮点数数组的指针:self.data_as(ctypes.POINTER(ctypes.c_double))
。返回的指针将保留对该数组的引用。
- _ctypes.shape_as(obj)[source]
将形状元组返回为某种其他 c-types 类型的数组。例如:
self.shape_as(ctypes.c_short)
。
- _ctypes.strides_as(obj)[source]
将步幅元组返回为某种其他 c-types 类型的数组。例如:
self.strides_as(ctypes.c_longlong)
。
如果 ctypes 模块不可用,则数组对象的 ctypes 属性仍然会返回一些有用的东西,但不会返回 ctypes 对象,而是可能引发错误。特别是,该对象仍将具有
as_parameter
属性,该属性将返回一个等于 data 属性的整数。示例
>>> import numpy as np >>> 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