Spec-Zone.ru › NumPy 1.14

numpy.recarray.ctypes

recarray.ctypes

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

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

Параметры:

None

Возвращает:

c : Объект Python

Обладает атрибутами data, shape, strides и т.д.

См. также

numpy.ctypeslib

Примечания

Ниже приведены общедоступные атрибуты этого объекта, которые были задокументированы в «Руководстве по NumPy» (мы опустили незадокументированные общедоступные атрибуты, а также задокументированные закрытые атрибуты):

  • data: Указатель на область памяти массива в виде целого числа Python. Эта область памяти может содержать данные, которые не выровнены или не имеют правильного порядка байтов. Область памяти может даже быть не доступна для записи. Флаги массива и тип данных этого массива должны учитываться при передаче этого атрибута в произвольный C-код, чтобы избежать проблем, которые могут включать сбой Python. Пользователь должен быть осторожен! Значение этого атрибута точно такое же, как self._array_interface_[‘data’][0].
  • shape (c_intp*self.ndim): Массив ctypes длины self.ndim, где базовый тип — целое число C, соответствующее dtype(‘p’) на данной платформе. Этот базовый тип может быть c_int, c_long или c_longlong в зависимости от платформы. Тип c_intp определяется соответствующим образом в numpy.ctypeslib. Массив ctypes содержит форму базового массива.
  • strides (c_intp*self.ndim): Массив ctypes длины self.ndim, где базовый тип такой же, как для атрибута shape. Этот массив ctypes содержит информацию о шагах из базового массива. Эта информация о шагах важна для того, чтобы показать, сколько байтов необходимо перепрыгнуть, чтобы перейти к следующему элементу массива.
  • data_as(obj): Возвращает указатель данных, преобразованный в определённый объект c-types. Например, вызов self._as_parameter_ эквивалентен self.data_as(ctypes.c_void_p). Возможно, вы хотите использовать данные как указатель на массив ctypes с плавающей точкой: self.data_as(ctypes.POINTER(ctypes.c_double)).
  • shape_as(obj): Возвращает кортеж формы как массив какого-либо другого типа c-types. Например: self.shape_as(ctypes.c_short).
  • strides_as(obj): Возвращает кортеж шагов как массив какого-либо другого типа c-types. Например: self.strides_as(ctypes.c_longlong).

Будьте внимательны, используя атрибут ctypes — особенно на временных массивах или массивах, созданных на лету. Например, вызов (a+b).ctypes.data_as(ctypes.c_void_p) возвращает недействительный указатель на память, потому что массив, созданный как (a+b), удаляется перед следующей инструкцией Python. Вы можете избежать этой проблемы, используя либо c=a+b или ct=(a+b).ctypes. В последнем случае ct будет хранить ссылку на массив, пока ct не будет удалён или переназначен.

Если модуль 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–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.14.5/reference/generated/numpy.recarray.ctypes.html

Spec-Zone.ru

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