在 ArrayFire 中创建虚数单位
Create the imaginary unit in ArrayFire
我想在 ArrayFire 中创建虚数单位,但我做不到。我可以从一个实矩阵构造一个复矩阵,但这不会是纯虚构的。也许我可以使用 this page 中的函数 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 年遇到运行时错误(未处理的异常)。我该怎么做?提前谢谢你。
经过几个小时的努力,这里是解决方案:
cdouble i = { 0, 1 }; /* imaginary unit */
以下是使用 C 和 C++ API 的方法。
您可以在此处找到 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,创建一个classstd::complex的对象,它的使用不会创建一个实际的ArrayFire对象。要创建数据类型为 "c64" 的 ArrayFire 对象,请使用
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);
我想在 ArrayFire 中创建虚数单位,但我做不到。我可以从一个实矩阵构造一个复矩阵,但这不会是纯虚构的。也许我可以使用 this page 中的函数 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 年遇到运行时错误(未处理的异常)。我该怎么做?提前谢谢你。
经过几个小时的努力,这里是解决方案:
cdouble i = { 0, 1 }; /* imaginary unit */
以下是使用 C 和 C++ API 的方法。 您可以在此处找到 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,创建一个classstd::complex的对象,它的使用不会创建一个实际的ArrayFire对象。要创建数据类型为 "c64" 的 ArrayFire 对象,请使用
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);