2017-07-24 53 views
9

考慮下面的(工作)段:徵常量TensorMap

Eigen::ArrayXd x (8); 
x << 1, 2, 3, 4, 5, 6, 7, 8; 
Eigen::TensorMap<Eigen::Tensor<double, 2>> y (x.data(), 2, 4); 

這也適用:

const Eigen::ArrayXd const_x = x; 
const Eigen::Map<const Eigen::ArrayXXd> z (const_x.data(), 2, 4); 

我試圖弄清楚爲什麼我不能做到這一點,但:

const Eigen::TensorMap<const Eigen::Tensor<double, 2>> const_y (const_x.data(), 2, 4); 

我使用本徵3.3.3(也試過3.3.4)

+0

你可以添加你的編譯錯誤信息? –

+4

嘗試「const Eigen :: TensorMap > const_y(const_x.data(),2,4);」。注意Eigen :: Tensor內部的「const double」。 –

+1

您是否嘗試了@CarlodelMundo的建議?它似乎能夠工作,儘管它不是標準的特徵語法 - 但是張量模塊作爲一個整體並不遵循幾個特徵標準(從命名爲'TensorMap'開始,而不是'Map '和'Map ')。 – chtz

回答

4

您正在嘗試存儲常量張量。

Error 2 error C2664: 'Eigen::TensorMap<PlainObjectType>::TensorMap(double *,__w64 int,__w64 int)' : impossible to convert parameter 1 from 'const double *' to 'double *' 

我想你的意思是有一個const雙(由@CarlodelMundo提到過)的張量。

const Eigen::TensorMap<Eigen::Tensor<const double, 2>> const_y(const_x.data(), 2, 4); 

https://eigen.tuxfamily.org/dox/unsupported/TensorMap_8h_source.html似乎沒有構造函數參數類型爲const作爲參數1

+0

我知道@CarlodelMundo提到的修復方法,但它不會感覺到Eigen-esque(正如@chtz指出的那樣) – user357269