Spec-Zone.ru › NumPy 1.18

numpy.matrix.ctypes

атрибут

matrix.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-типов. Например, вызов 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-типов. Например: self.shape_as(ctypes.c_short).

_ctypes.strides_as(self, obj) [source]

Возвращает кортеж шагов в виде массива другого типа c-типов. Например: 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.matrix.ctypes.html

Spec-Zone.ru

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