Spec-Zone.ru › NumPy 1.12

numpy.core.defchararray.chararray.ctypes

chararray.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>

© 2008–2016 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.core.defchararray.chararray.ctypes.html

Spec-Zone.ru

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