Spec-Zone.ru › NumPy 1.15

numpy.matrix.ctypes

matrix.ctypes

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

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

Параметры:
None
Возвращает:
c : Python object

Объект с атрибутами 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): Возвращает кортеж shape в виде массива другого типа c-types. Например: self.shape_as(ctypes.c_short).
  • strides_as(obj): Возвращает кортеж strides в виде массива другого типа 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.15.4/reference/generated/numpy.matrix.ctypes.html

Spec-Zone.ru

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