我试图将一个 int 除以一个 Eigen 张量,唯一的方法是引入一个仍然返回零的虚拟变量。不知何故,我用零覆盖了我的输出:
代码:
void c2rfft3d(Eigen::Tensor<std::complex<double>, 3>& cArr, Eigen::Tensor<double, 3>& rArr){
fftw_complex *input_array;
input_array = (fftw_complex*) fftw_malloc(nx*ny*nz * sizeof(fftw_complex));
memcpy(input_array, cArr.data(), nx*ny*nz * sizeof(fftw_complex));
fftw_complex *output_array;
output_array = (fftw_complex*) fftw_malloc(nx*ny*nz * sizeof(fftw_complex));
fftw_plan backward = fftw_plan_dft_3d(nx, ny, nz, input_array, output_array, FFTW_BACKWARD, FFTW_ESTIMATE);
fftw_execute(backward);
fftw_destroy_plan(backward);
fftw_cleanup();
memcpy(rArr.data(),output_array, nx*ny*nz * sizeof(double));
//normalize by size:
Eigen::Tensor<double, 3> dummy (nx,ny,nz);
dummy = 1/(nx*ny*nz) * rArr.data();
rArr = dummy;
}
这显然行不通并尝试类似的东西
dummy = 1/(nx*ny*nz) * rArr;
以上尝试都没有真正起作用,我只是想除以
(nx*ny*nz)
或rArr/(nx*ny*nz)
是否有有效的方法来做到这一点?谢谢!
不能评论所以我写这个作为答案
使用
rArr/(nx*ny*nz)
而不是 1/(nx*ny*nz)*rArr
会更好,因为你可能不小心做 1/((nx*ny*nz)*rArr)
.
还要检查
dummy
、nx
、ny
、nz
和 rArr
变量的类型,因为编译器进行的自动转换可能是这里的问题
不是 Eigen 方面的专家,但听起来
rArr.data()
返回一个指针,该指针可能会以某种方式转换为非零值。
此外,
1/(nx*ny*nz)
似乎是“整数除法”,总是准确返回零。
也许这有机会工作:
Eigen::Tensor<double, 3> dummy = 1.0/(nx*ny*nz) * rArr;