Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 12.12.2019
Сообщений: 26

ctypes & numpy

12.12.2019, 10:34. Показов 1925. Ответов 5

Студворк — интернет-сервис помощи студентам
Доброе утро!

Я новичок в Python'e и мне нужно ускорить код для работы с матрицами Numpy. Я так понял что в библиотеке Numpy есть специальные методы для работы с ctypes, но не могу нормально разобраться. Объясните как передать матрицу в си код и из си получить новую матрицу. Если можете, напишите самый простейший пример в котором в Python создается массив Numpy [[1, 2], [3, 4]], она передается через ctypes в код си, который увеличивает на 1 каждый элемент. Новая матрица передается в Python который выводит новую матрицу.
Заранее спасибо и просьба не закидывать меня фразами типа "документация в помощь")
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.12.2019, 10:34
Ответы с готовыми решениями:

query='SELECT * FROM resume WHERE ' & ''' & RecSet('place')& ''' & '=' & '''& s_loc &''' & - что не так?
упростил для краткости запрос. в чем ошибка? RecSet - это коннекшн. query='SELECT * FROM resume WHERE ' & ''' &...

error '80020009' Îøèáêà. /lalala/profile.asp, line 28
При простейшем и сто раз работавшем скрипте, вылетает ошибка! след. содержания error '80020009' ...

Помогите найти драйвера для pci\ven_8086&DEV_266E&SUBSYS_A002145&REV_05\3&13C0B0C5&0&F2
pci\ven_8086&DEV_266E&SUBSYS_A002145&REV_05\3&13C0B0C5&0&F2 Мультимедиа аудиоконтроллер помогите плз найти...

5
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
12.12.2019, 12:11
Лучший ответ Сообщение было отмечено dj_jd как решение

Решение

Ну, можно не в документацию, можно в гугль Ибо гугль выдаёт сразу (ссылк кинуть не могу)
Python
1
fun(ctypes.c_void_p(indata.ctypes.data), ctypes.c_void_p(outdata.ctypes.data))
где fun - импортированная С-функция, которая принимает указатели.

Есть способ посложнее, но в итоге удобнее. Подготовка - указываем питоновской программе сишную сигнатуру:
Python
1
2
3
4
5
6
7
8
import ctypes
from numpy.ctypeslib import ndpointer
lib = ctypes.cdll.LoadLibrary("./ctest.so")
fun = lib.cfun
fun.restype = None
fun.argtypes = [ndpointer(ctypes.c_double, flags="C_CONTIGUOUS"),
                ctypes.c_size_t,
                ndpointer(ctypes.c_double, flags="C_CONTIGUOUS")]
Собственно, вызов:
Python
1
2
3
indata = numpy.ones((5,6))
outdata = numpy.empty((5,6))
fun(indata, indata.size, outdata)
1
0 / 0 / 0
Регистрация: 12.12.2019
Сообщений: 26
12.12.2019, 22:46  [ТС]
Код работает, но я немного туплю и не могу его запустить для массивов int. Можете написать полный код (на си и python) чтобы из массива numpy [[1, 2], [3, 4]] получить массив [[3, 4], [5, 6]]. Когда я пытаюсь это сделать, он выводит ошибку ctypes.ArgumentError: argument 1: <class 'TypeError'>: array must have data type int32
вот код:
C
1
2
3
4
5
void fun(short* input, int length, short* output) {
    for (int i = 0; i < length; i++) {
        output[i] = input[i] + 2;
    }
}
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import ctypes
from numpy.ctypeslib import ndpointer
import numpy
import os
 
os.system('gcc -shared -o first.so first.c')
 
lib = ctypes.cdll.LoadLibrary("./first.so")
pfun = lib.fun
pfun.restype = None
pfun.argtypes = [ndpointer(ctypes.c_int, flags="C_CONTIGUOUS"),
                ctypes.c_int,
                ndpointer(ctypes.c_size_t, flags="C_CONTIGUOUS")]
 
indata = numpy.array([[1, 2], [3, 4]])
outdata = numpy.array([[1, 1], [1, 1]])
print(indata)
print(outdata)
pfun(indata, indata.size, outdata)
print(indata)
print(outdata)
Как исправить ошибку?
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
13.12.2019, 10:01
dj_jd, не знаю. Последний раз передавал массивы numpy в нативный код много лет назад, и это был delphi
Но вы сверьте типы, в первую очередь.
0
0 / 0 / 0
Регистрация: 12.12.2019
Сообщений: 26
13.12.2019, 16:43  [ТС]
По ходу работы возник новый вопрос. Я смог нормально запустить код си с помощью ctypes и спокойно работать с массивами numpy. Но в функции много вычислительных моментов и она сильно проседала по времени, когда я писал ее на python. Поэтому я переписал ее на си и использовал ctypes. Но почему-то код компилируется опять очень долго (хотя если компилировать похожий код с похожими алгоритмами на чистом си, то все летает). Разве использование ctypes не ускоряет код на Python? Или он просто позволяет запускать модули на си и нет никакого ускорения?
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
13.12.2019, 18:16
dj_jd,
Разве использование ctypes не ускоряет код на Python? Или он просто позволяет запускать модули на си и нет никакого ускорения?
Именно. Для взаимодействия с нативным кодом.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.12.2019, 18:16
Помогаю со студенческими работами здесь

Нужен драйвера, код PCI\VEN_1039&DEV_7012&SUBSYS_0C98105B&REV_A0\3&B1BFB68&0&17
всем привет !! уменя нет звука нужен драйвер код PCI\VEN_1039&amp;DEV_7012&amp;SUBSYS_0C98105B&amp;REV_A0\3&amp;B1BFB68&amp;0&amp;17 скачал прогу их много ...

Мультимедиа контролер PCI\VEN_14F1&DEV_8800&SUBSYS_EA3D14F1&REV_05\4&25700A26&0&3020
Помогите пожалуйста найти драйвер на мультимедиа видеоконтролер ...

немогу найти драйвера на PCI\VEN_1039&DEV_7012&SUBSYS_810D1043&REV_A0\3&61AAA01&0&17
Мультимедиа аудиоконтроллер PCI\VEN_1039&amp;DEV_7012&amp;SUBSYS_810D1043&amp;REV_A0\3&amp;61AAA01&amp;0&amp;17

Драйвера на PCI\VEN_10B7&DEV_1700&SUBSYS_80EB1043&REV_12\4&2E98101C&0&28 F0
помогите плиз - вот ID: PCI\VEN_10B7&amp;DEV_1700&amp;SUBSYS_80EB1043&amp;REV_12\4&amp;2E98101C&amp;0&amp;28F0 Заранее...

Кто встречался с таким, подскажите - (#206;&#225;&#250;&#229;&#234;&#242;)
Если на asp-странице происходит ошибка, то сервер выдает сообщение вот примерно в таком виде: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru