numpy.recarray.ctypes
атрибут
- recarray.ctypes
-
Объект для упрощения взаимодействия массива с модулем ctypes.
Этот атрибут создаёт объект, который упрощает использование массивов при вызове общих библиотек с модулем ctypes. Возвращаемый объект имеет, среди прочего, атрибуты data, shape и strides (см. Примечания ниже), которые сами возвращают объекты ctypes, которые могут быть использованы в качестве аргументов общей библиотеки.
- Параметры:
-
- None
- Возвращаемое значение:
-
- cОбъект Python
-
Обладает атрибутами 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): Массив ctypes длиной self.ndim, где базовый тип — целое число C, соответствующее
dtype('p')на данной платформе (см.c_intp). Этот базовый тип может бытьctypes.c_int,ctypes.c_longилиctypes.c_longlongв зависимости от платформы. Массив ctypes содержит форму базового массива.
- _ctypes.strides
-
(c_intp*self.ndim): Массив ctypes длиной self.ndim, где базовый тип такой же, как для атрибута 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]
-
Возвращает кортеж shape как массив некоторого другого типа c-types. Например:
self.shape_as(ctypes.c_short).
- _ctypes.strides_as(obj)[source]
-
Возвращает кортеж strides как массив некоторого другого типа c-types. Например:
self.strides_as(ctypes.c_longlong).
Если модуль ctypes недоступен, то атрибут ctypes объектов массивов всё ещё возвращает что-то полезное, но объекты ctypes не возвращаются, и могут быть подняты ошибки. В частности, у объекта всё ещё будет атрибут
as_parameter, который вернёт целое число, равное атрибуту data.Примеры
>>> 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
© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.recarray.ctypes.html