C++ 从函数返回am Eigen::张量切片
我想写一些函数,返回特征::张量的切片。在实际代码中,getSlice()接受一些整数,并计算范围和偏移量。我希望我的函数将视图返回到数组中,这样我就可以访问数组进行读写而无需复制 我可以创建一个变量,它是数组的一部分,并修改数据。但是,当我从函数返回相同的切片时,值不会改变。我猜想该函数会生成一个新数组作为返回值。我该如何退回我需要的切片?还是我应该用另一种方式C++ 从函数返回am Eigen::张量切片,c++,eigen,C++,Eigen,我想写一些函数,返回特征::张量的切片。在实际代码中,getSlice()接受一些整数,并计算范围和偏移量。我希望我的函数将视图返回到数组中,这样我就可以访问数组进行读写而无需复制 我可以创建一个变量,它是数组的一部分,并修改数据。但是,当我从函数返回相同的切片时,值不会改变。我猜想该函数会生成一个新数组作为返回值。我该如何退回我需要的切片?还是我应该用另一种方式 #include <iostream> #include <Eigen/Dense> #include &l
#include <iostream>
#include <Eigen/Dense>
#include <unsupported/Eigen/CXX11/Tensor>
Eigen::Tensor<float,3> getSlice(Eigen::Tensor<float,3>& a,
Eigen::array<long,3>& offset,
Eigen::array<long,3>& extent)
{
return a.slice(offset,extent);
}
int main()
{
Eigen::Tensor<float,3> et = Eigen::Tensor<float,3>(3,5,4);
et.setConstant(1.1);
std::cout << et << std::endl;
Eigen::array<long,3> offset = {0,0,0};
Eigen::array<long,3> extent = {2,2,1};
et.slice(offset,extent).setConstant(2.2);
std::cout << "Set slice constant" << std::endl;
std::cout << et << std::endl;
auto sl = et.slice(offset,extent);
sl.setConstant(3.3);
std::cout << "Set slice constant from slice instance." << std::endl;
std::cout << et << std::endl;
getSlice(et,offset,extent).setConstant(4.4);
std::cout << "Set slice constant from function." << std::endl;
std::cout << et << std::endl;
}
#包括
#包括
#包括
特征::张量getSlice(特征::张量&a,
特征::阵列和偏移,
特征::数组和范围)
{
返回a.slice(偏移量、范围);
}
int main()
{
本征张量et=本征张量(3,5,4);
et.setConstant(1.1);
std::cout您观察到的getSlice
的实现返回一个新的张量对象(带有原始数据的副本)是正确的。在您的情况下,最简单的解决方案是将返回类型更改为auto
(尽管您通常应该小心使用auto
和Eigen):
内联自动获取切片(Eigen::Tensor&a,
特征::阵列和偏移,
特征::数组和范围)
{
返回a.slice(偏移量、范围);
}
现场演示:
inline auto getSlice(Eigen::Tensor<float,3>& a,
Eigen::array<long,3>& offset,
Eigen::array<long,3>& extent)
{
return a.slice(offset,extent);
}