![](/img/trans.png)
[英]How to write fast c++ lazy evaluation code in Fastor or Xtensor?
[英]lazy-evaluation in Xtensor
在以下使用xtensor 的函數中,我期望編譯器將計算圖表達為auto z = 3.0 * u + 100 * xt::cos(u);
並在xt::xtensor_fixed<T, xt::xshape<nn>> out = z;
處評估結果xt::xtensor_fixed<T, xt::xshape<nn>> out = z;
將表達式分配給精確張量時。
template<typename T, size_t nn>
T func_cos(xt::xtensor_fixed<T, xt::xshape<nn>> &u) {
auto z = 3.0 * u;
for (auto k = 0; k < 100; ++k){
z += xt::cos(u);
}
xt::xtensor_fixed<T, xt::xshape<nn>> out = z;
return out(0);
}
但是,我遇到了錯誤
views_xtensor.cpp:76:11: error: no viable overloaded '+='
z += xt::cos(u);
[....]
我是否以錯誤的方式使用了auto
? 如何在 for 循環中使用惰性求值?
感謝您的幫助!
當你寫
auto z = 3.0 * u
z
的類型對操作進行編碼,類似於
xfunction<multiplies, scalar<double>, xtensor_fixed>
這個類沒有任何值,所以不可能給它賦值(即使它是一個計算賦值)。 現在即使 iw 是可能的,請考慮以下表達式
auto y = z + xt::cos(u);
這個表達式的類型類似於
xfunction<plus, type(z), xfunction<cos, xtensor_fixed>>
所以當你寫
z += xt::cos(u); // equivalent to z = z + xt::cos(u);
您嘗試為z
分配完全不同類型的東西。
由於這些原因,不能在 for 循環中使用惰性求值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.