LINUX.ORG.RU

Points из numpy.array

 , , , ,


0

1

Как делать массивы numpy понятными другим библиотекам?

Пример. Есть функция https://wiki.libsdl.org/SDL_RenderDrawPoints:
int SDL_RenderDrawPoints( SDL_Renderer * renderer, const SDL_Point * points, int count )
где SDL_Point — структура из 2 целых: https://wiki.libsdl.org/SDL_Point:
typedef struct SDL_Point { int x; int y; } SDL_Point;
Разумеется, всё это обёрнуто в Питон, то есть sdl2.SDL_RenderDrawPoints() и sdl2.SDL_Point().

Если просто вызывать SDL_RenderDrawPoints, ставя вторым аргументом numpy.array целых чисел, конечно, будет ошибка о неправильном типе: «ctypes.ArgumentError: argument 2: <class ‘TypeError’>: expected LP_SDL_Point instance instead of numpy.ndarray». Я пробовал экспериментировать с numpy.array.ctypes.data_as(), но не нашёл подходящий тип. Она хочет именно LP_SDL_Point.

Как показать ей, что массив является набором структур SDL_Points? В SDL имеются преобразования массивов точек в массивы numpy, но обратного преобразования я не нашёл.

★★★★★

np.array.ctypes.data_as(ctypes.POINTER(sdl2.SDL_Point)) работает.

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

Потому что в SDL_Point поля 32-битные, а линуксовая numpy по умолчанию всё преобразовывала в 64-битные. Заработало, когда проставил типы явно.

question4 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.