ctypes foreign function interface (numpy.ctypeslib)#
- numpy.ctypeslib.as_array(obj, shape=None)[источник]#
Создать массив numpy из массива ctypes или POINTER.
Массив numpy использует общую память с объектом ctypes.
Параметр shape должен быть указан при преобразовании из ctypes POINTER. Параметр shape игнорируется при преобразовании из ctypes array
Примеры
Преобразование целочисленного массива ctypes:
>>> import ctypes >>> ctypes_array = (ctypes.c_int * 5)(0, 1, 2, 3, 4) >>> np_array = np.ctypeslib.as_array(ctypes_array) >>> np_array array([0, 1, 2, 3, 4], dtype=int32)
Преобразование указателя ctypes POINTER:
>>> import ctypes >>> buffer = (ctypes.c_int * 5)(0, 1, 2, 3, 4) >>> pointer = ctypes.cast(buffer, ctypes.POINTER(ctypes.c_int)) >>> np_array = np.ctypeslib.as_array(pointer, (5,)) >>> np_array array([0, 1, 2, 3, 4], dtype=int32)
- numpy.ctypeslib.as_ctypes(obj)[источник]#
Создать и вернуть объект ctypes из массива numpy. Фактически принимается всё, что предоставляет __array_interface__.
Примеры
Создать объект ctypes из выведенного целого числа
np.array:>>> inferred_int_array = np.array([1, 2, 3]) >>> c_int_array = np.ctypeslib.as_ctypes(inferred_int_array) >>> type(c_int_array)
>>> c_int_array[:] [1, 2, 3] Создать объект ctypes из явного 8-битного беззнакового целого числа
np.array:>>> exp_int_array = np.array([1, 2, 3], dtype=np.uint8) >>> c_int_array = np.ctypeslib.as_ctypes(exp_int_array) >>> type(c_int_array)
>>> c_int_array[:] [1, 2, 3]
- numpy.ctypeslib.as_ctypes_type(dtype)[источник]#
Преобразует dtype в тип ctypes.
- Параметры:
- dtypedtype
Тип данных для преобразования
- Возвращает:
- ctype
Скаляр, объединение, массив или структура ctype
- Вызывает:
- NotImplementedError
Если преобразование невозможно
Примечания
Эта функция не обеспечивает безошибочное преобразование в обоих направлениях.
np.dtype(as_ctypes_type(dt))будет:вставить поля заполнения
переупорядочить поля по смещению
отбросить заголовки полей
as_ctypes_type(np.dtype(ctype))будет:отбросить имена классов
ctypes.Structures иctypes.Unionsпреобразовать одноэлементный
ctypes.Unions в одноэлементныеctypes.Structuresвставить поля заполнения
Примеры
Преобразование простого dtype:
>>> dt = np.dtype('int8') >>> ctype = np.ctypeslib.as_ctypes_type(dt) >>> ctype
Преобразование структурированного типа данных:
>>> dt = np.dtype([('x', 'i4'), ('y', 'f4')]) >>> ctype = np.ctypeslib.as_ctypes_type(dt) >>> ctype
- numpy.ctypeslib.load_library(libname, loader_path)[источник]#
Возможно загрузить библиотеку с помощью
>>> lib = ctypes.cdll[<full_path_name>]
Но есть кросс-платформенные соображения, такие как расширения файлов библиотек, а также тот факт, что Windows просто загрузит первую найденную библиотеку с таким именем. NumPy предоставляет функцию load_library для удобства.
Изменено в версии 1.20.0: Позволяет libname и loader_path принимать любые объект, подобный пути.
- Параметры:
- libnameпуть-подобный
Имя библиотеки, которое может иметь префикс 'lib', но без расширения.
- loader_pathпуть-подобный
Где можно найти библиотеку.
- Возвращает:
- ctypes.cdll[libpath]объект библиотеки
Объект библиотеки ctypes
- Вызывает:
- OSError
Если нет библиотеки с ожидаемым расширением, или библиотека дефектна и не может быть загружена.
- numpy.ctypeslib.ndpointer(dtype=None, ndim=None, shape=None, флаги=None)[источник]#
Проверка типов возвращаемых значений/аргументов для массивов.
Экземпляр ndpointer используется для описания ndarray в спецификациях restypes и argtypes. Этот подход более гибкий, чем использование, например,
POINTER(c_double), поскольку можно указать несколько ограничений, которые проверяются при вызове функции ctypes. Они включают тип данных, количество размерностей, форму и флаги. Если заданный массив не удовлетворяет указанным ограничениям,TypeErrorвызывается исключение.- Параметры:
- dtypeтип данных, опционально
Тип данных массива.
- ndimint, необязательный
Количество измерений массива.
- shapeкортеж целых чисел, необязательный
Форма массива.
- флагиstr или кортеж из str
Флаги массива; могут быть одним или несколькими из:
C_CONTIGUOUS / C / CONTIGUOUS
F_CONTIGUOUS / F / FORTRAN
OWNDATA / O
WRITEABLE / W
ALIGNED / A
WRITEBACKIFCOPY / X
- Возвращает:
- klassобъект типа ndpointer
Объект типа, который является
_ndtprэкземпляр, содержащий информацию о dtype, ndim, shape и flags.
- Вызывает:
- TypeError
Если данный массив не удовлетворяет указанным ограничениям.
Примеры
>>> clib.somefunc.argtypes = [np.ctypeslib.ndpointer(dtype=np.float64, ... ndim=1, ... flags='C_CONTIGUOUS')] ... >>> clib.somefunc(np.array([1, 2, 3], dtype=np.float64)) ...
- класс numpy.ctypeslib.c_intp#
A
ctypesзнаковый целочисленный тип того же размера, что иnumpy.intp.В зависимости от платформы, это может быть псевдоним для
c_int,c_longилиc_longlong.