numpy.ndarray.ctypes
-
ndarray.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.ndarray.ctypes.html