numpy.matrix.ctypes#
属性
- matrix.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
一个长度为 self.ndim 的 ctypes 数组,其中基类型是与此平台上的
dtype('p')
对应的 C 整数(参见c_intp
).这个基类型可能是ctypes.c_int
、ctypes.c_long
或ctypes.c_longlong
,具体取决于平台.ctypes 数组包含底层数组的形状.- 类型:
(c_intp*self.ndim)
- _ctypes.strides
一个长度为 self.ndim 的 ctypes 数组,其中基类型与 shape 属性的基类型相同.这个 ctypes 数组包含底层数组的步幅信息.这个步幅信息对于显示必须跳过多少字节才能到达数组中的下一个元素非常重要.
- 类型:
(c_intp*self.ndim)
- _ctypes.data_as(obj)[源代码][源代码]
返回数据指针转换为特定的 c-types 对象.例如,调用
self._as_parameter_
等同于self.data_as(ctypes.c_void_p)
.也许你想将数据用作指向浮点数据 ctypes 数组的指针:self.data_as(ctypes.POINTER(ctypes.c_double))
.返回的指针将保持对数组的引用.
如果 ctypes 模块不可用,那么数组对象的 ctypes 属性仍然返回一些有用的东西,但不会返回 ctypes 对象,而是可能会引发错误.特别是,对象仍然会有
as_parameter
属性,该属性将返回一个等于数据属性的整数.示例
>>> 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