Создайте воображаемый блок в ArrayFire

Я хотел бы создать воображаемый блок в ArrayFire, но не могу. Я могу построить сложную матрицу из реальной матрицы, но это не будет чисто воображаемым. Возможно, я могу использовать функцию af_cplx2 с этой страницы. Я думал о следующем:

af_array *R;
const af_array re = 0.0;
const af_array im = 1.0;
af_cplx2(R,re,im,0);

Однако я получаю ошибку времени выполнения (необработанное исключение) в Visual Studio 2013. Как я могу это сделать? Заранее спасибо.

3 ответа

Решение

Вот как вы могли бы сделать это, используя API C и C++. Вы можете найти API здесь: http://www.arrayfire.com/docs/group__data__func__constant.htm

// Using C++ API
cfloat h_unit = {0, 1}  // Host side
af::array unit = af::constant(h_unit, 1, c32); // Creates an array of size 1 containing all {0, 1} on device side.

// Using C API
af_array af_unit = 0;
dim_type dims{} = {1};
dim_type ndims = 1;
af_constant_complex(&af_unit, 0, 1, ndims, dims, c32};

Этот ответ расширяет ответ Христофора Колумба.

cdouble, создает объект класса std::complex, его использование не создает фактический объект ArrayFire. Чтобы создать объект ArrayFire с типом данных "c64", используйте это,

cdouble i_cdouble = { 0, 1 }; 
array i = constant(i_cdouble,1,1, c64);/* imaginary unit */
printf("\n Creating an imaginary unit, since there is no ArrayFire inbuilt constant.");
af_print(i); 

После нескольких часов кропотливой работы вот решение:

cdouble i = { 0, 1 }; /* imaginary unit */
Другие вопросы по тегам