C++ can';用本征函数做二维压缩吗?

C++ can';用本征函数做二维压缩吗?,c++,eigen,C++,Eigen,我试着用一个二阶张量(1x1)在最后两维上做一个三阶张量(1x1)的张量收缩。结果应该是一个向量 下面给出了一个断言: #include <Eigen/Core> #include <unsupported/Eigen/CXX11/Tensor> #include <iostream> #include <array> #include <iostream> #include <memory> #include <th

我试着用一个二阶张量(1x1)在最后两维上做一个三阶张量(1x1)的张量收缩。结果应该是一个向量

下面给出了一个断言:

#include <Eigen/Core>
#include <unsupported/Eigen/CXX11/Tensor>
#include <iostream>
#include <array>
#include <iostream>
#include <memory>
#include <thread>
#include <chrono>
#include <mutex>



using namespace Eigen;
using namespace std;


int main()
{
        Eigen::Tensor<double, 3> tensor(1, 1, 1);
        Eigen::Tensor<double, 2> tensor2(1,1);

        Eigen::Tensor<double, 1> tensor1;

        std::array<Eigen::IndexPair<int>, 1> product_dims;

        product_dims[0] =  { IndexPair<int>(1, 0) };
        product_dims[1] =  { IndexPair<int>(2, 1) };

        auto vv = tensor.contract(tensor2, product_dims);

        cerr<<"value: "<<vv<<endl;

        tensor1 = vv;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间特征;
使用名称空间std;
int main()
{
本征:张量张量(1,1,1);
本征:张量张量2(1,1);
本征::张量张量1;
std::阵列产品尺寸;
乘积_dims[0]={IndexPair(1,0)};
乘积_-dims[1]={IndexPair(2,1)};
自动vv=张量合同(张量2,产品尺寸);

cerr您的数组大小为1,因此您实际上收缩了一对维度。您应该按照以下方式创建数组:

std::array<Eigen::IndexPair<int>, 2> product_dims;
std::阵列产品尺寸;
std::array<Eigen::IndexPair<int>, 2> product_dims;