Spec-Zone.ru › NumPy 1.18

numpy.memmap.ctypes

атрибут

memmap.ctypes

Объект для упрощения взаимодействия массива с модулем ctypes.

Этот атрибут создаёт объект, который упрощает использование массивов при вызове общих библиотек с модулем ctypes. Возвращаемый объект имеет, среди прочего, атрибуты data, shape и strides (см. Примечания ниже), которые сами возвращают объекты ctypes, которые могут быть использованы в качестве аргументов для общей библиотеки.

Параметры
None
Возвращает
cPython object

Обладая атрибутами 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): Массив ctypes длиной self.ndim, где базовый тип — целое число C, соответствующее dtype('p') на этой платформе. Этот базовый тип может быть ctypes.c_int, ctypes.c_long или ctypes.c_longlong в зависимости от платформы. Тип c_intp определяется соответствующим образом в numpy.ctypeslib. Массив ctypes содержит форму базового массива.

_ctypes.strides

(c_intp*self.ndim): Массив ctypes длиной self.ndim, где базовый тип такой же, как и для атрибута shape. Этот массив ctypes содержит информацию о шагах из базового массива. Эта информация о шагах важна для того, чтобы показать, сколько байтов нужно перепрыгнуть, чтобы получить следующий элемент в массиве.

_ctypes.data_as(self, 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(self, obj) [source]

Возвращает кортеж формы в виде массива другого типа c-types. Например: self.shape_as(ctypes.c_short).

_ctypes.strides_as(self, obj) [source]

Возвращает кортеж шагов в виде массива другого типа c-types. Например: self.strides_as(ctypes.c_longlong).

Если модуль ctypes недоступен, то атрибут ctypes объектов массивов всё ещё возвращает что-то полезное, но объекты ctypes не возвращаются и вместо этого могут быть вызваны ошибки. В частности, объект по-прежнему будет иметь атрибут as_parameter, который вернёт целое число, равное атрибуту 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>

© 2005–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.18/reference/generated/numpy.memmap.ctypes.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API