簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM