Исключение ArrayFire (типы ввода не совпадают) - PullRequest
1 голос
/ 25 февраля 2020

Я пытаюсь понять, как использовать библиотеку arrayfire, и я написал следующий небольшой фрагмент кода для создания 2D-графика, например

enter image description here

af::info();
af::Window myWindow(800, 800, "2D Plot example: ArrayFire");    
myWindow.grid(3, 1);

std::vector <double> xyz = { -1, -1, -1, -1, 0, 0, -1,  -2, -2, -2, -1, -1, 1,  3,  4,  5,  4,  2,  -1, -2 };
array A = seq(0, 19);
af_print(A);
array B(xyz.size(), xyz.data());
af_print(B);

myWindow(0, 0).plot(A, B);
myWindow.show();

но я получаю ошибку ввода несоответствия типов во время выполнения.

> ArrayFire Exception (Input types are not the same:205): In function
> af_err __cdecl plotWrapper(void *const ,void *const ,void *const
> ,const af_cell *const ,fg_plot_type,fg_marker_type) In file
> src\api\c\plot.cpp:268 Type mismatch inputs  0# af::allocHost<short>
> in afopencl  1# af::allocHost<short> in afopencl  2#
> af::allocHost<short> in afopencl  3# af_is_real in af  4# af_is_real
> in af  5# main at C:\Users\rad\source\repos\ArrayFire\plot2d.cpp:44 
> 6# invoke_main at
> d:\agent\_work\5\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:79
> 7# __scrt_common_main_seh at
> d:\agent\_work\5\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288
> 8# __scrt_common_main at
> d:\agent\_work\5\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:331
> 9# mainCRTStartup at
> d:\agent\_work\5\s\src\vctools\crt\vcstartup\src\startup\exe_main.cpp:17
> 10# BaseThreadInitThunk in KERNEL32 11# RtlUserThreadStart in ntdll
> 
> In function void __cdecl af::Window::plot(const class af::array
> &,const class af::array &,cons

Может кто-нибудь помочь мне или указать мне правильный учебник. Отсюда я следую примеру массива: http://arrayfire.org/docs/examples.htm.

Заранее благодарю за помощь.

1 Ответ

0 голосов
/ 26 февраля 2020

Есть несколько вещей, которые можно улучшить.

  1. массив B состоит из данных с двойной точностью, в то время как массив A имеет одинарную точность, то есть с плавающей точкой. Вызов Window :: plot () ожидает, что координаты x и y будут одного типа данных. Следовательно, сообщение об ошибке «Несоответствие типов».
  2. То, как вы сейчас пишете графический код, заключается не в том, как работает функциональность массива графики. У пользователя должно быть событие l oop, вы можете быстро найти, как написать одно из наших графических примеров .

Пожалуйста, go через нашу графику учебное пособие , за которым следуют примеры, такие как plot2 , о том, как написать программу многоуровневого рендеринга.

Поскольку вы изучаете arrayfire, я рекомендую один раз просмотреть учебные пособия перед использованием кода в arrayfire или портированием существующего кода в arrayfire.

...