numpy.ndarray.ctypes#

屬性

ndarray.ctypes#

一個簡化陣列與 ctypes 模組互動的物件。

此屬性建立一個物件,使您在透過 ctypes 模組呼叫共享函式庫時,更輕鬆地使用陣列。傳回的物件具有 data、shape 和 strides 等屬性 (請參閱下面的「註解」),這些屬性本身會傳回可用作共享函式庫引數的 ctypes 物件。

參數:
傳回值:
cPython 物件

具有 data、shape、strides 等屬性。

另請參閱

numpy.ctypeslib

註解

以下是此物件的公開屬性,這些屬性記錄在《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') 的 C 整數 (請參閱 c_intp)。此 base-type 可能是 ctypes.c_intctypes.c_longctypes.c_longlong,具體取決於平台。ctypes 陣列包含基礎陣列的形狀。

_ctypes.strides

(c_intp*self.ndim): 一個長度為 self.ndim 的 ctypes 陣列,其中 basetype 與 shape 屬性的相同。此 ctypes 陣列包含來自基礎陣列的 strides 資訊。此 strides 資訊對於顯示必須跳過多少位元組才能到達陣列中的下一個元素非常重要。

_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 型別的陣列形式傳回 shape 元組。例如:self.shape_as(ctypes.c_short)

_ctypes.strides_as(obj)[source]

以其他 c-types 型別的陣列形式傳回 strides 元組。例如: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