错误:如何将特征张量除以标量或整数?

问题描述 投票:0回答:2

我试图将一个 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)
是否有有效的方法来做到这一点?谢谢!

c++ eigen eigen3
2个回答
0
投票

不能评论所以我写这个作为答案

使用

rArr/(nx*ny*nz)
而不是
1/(nx*ny*nz)*rArr
会更好,因为你可能不小心做
1/((nx*ny*nz)*rArr)
.

还要检查

dummy
nx
ny
nz
rArr
变量的类型,因为编译器进行的自动转换可能是这里的问题


0
投票

不是 Eigen 方面的专家,但听起来

rArr.data()
返回一个指针,该指针可能会以某种方式转换为非零值。

此外,

1/(nx*ny*nz)
似乎是“整数除法”,总是准确返回零。

也许这有机会工作:

Eigen::Tensor<double, 3> dummy = 1.0/(nx*ny*nz) * rArr;
© www.soinside.com 2019 - 2024. All rights reserved.