numpy.memmap.ctypes
атрибут
-
memmap.ctypes -
Объект для упрощения взаимодействия массива с модулем ctypes.
Этот атрибут создаёт объект, который упрощает использование массивов при вызове общих библиотек с модулем ctypes. Возвращаемый объект имеет, среди прочего, атрибуты data, shape и strides (см. Примечания ниже), которые сами возвращают объекты ctypes, которые могут быть использованы в качестве аргументов для общей библиотеки.
- Параметры
-
- None
- Возвращает
-
-
cPython object -
Обладая атрибутами 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')на этой платформе. Этот базовый тип может быть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