gpt4 book ai didi

clojure - 在 clojure 中迭代时间序列的问题

转载 作者:行者123 更新时间:2023-12-04 07:12:39 24 4
gpt4 key购买 nike

我有以下问题:
我有一个包含 10000 多个条目的时间序列,我想对每个条目进行一些计算。仅此一项不会成为问题,但我需要获得最后一个计算值才能获得下一个。我需要的一种非常简单的形式如下所示:
Val(n) = Val(n-1) + (time-series-entry / 2) (或类似的东西!)

我不知道如何管理这个。简单地做这样的事情:

(defn calc-val
[time-series element]
(seq (cons (generate-val-element time-series element)
(calc-val time-series (inc element)))))

不会工作,因为不能(至少我不知道如何!)获得最后一个计算值。
然后我想:好吧,让我们使用 Loop-Recur。这将为我提供与时间序列条目相对应的值,但对于下一个我将不得不再次进行所有计算。
Iterate 是正确的,但它不起作用,因为该函数有副作用。

所以我被困在这里。如果有人能给我一个提示,那就太好了。

最佳答案

如果您只关心最终结果,请使用 reduce ;如果您需要获得一系列依次转换每个值的结果(其中每个转换取决于之前的转换),请使用 reductions (在 1.1 中的 clojure.contrib.seq-utils 和 1.2 中的 clojure.core 中找到)。

下面,transform-first-entry对第一个条目做任何你想做的事情(如果你不需要以任何方式转换它,你可以把第一个参数省略到 reduce/reductions 并使用 entries 而不是 (rest entries作为最后的论点); transform-entry是获取转换前一个条目和当前条目(按此顺序)的结果并生成当前条目的转换结果的函数。

;;; only care about the final result
(reduce transform-entry
(transform-first-entry (first series))
(rest entries))

;;; need to get a seq of intermediate results
(reductions ...arguments as above...)

请注意 reductions很懒。

假设您想保持第一个条目不变并将您的示例转换从问题文本应用到后续条目,您可以使用
(defn transform-entry [prev-transformed current]
(+ prev-transformed
(/ current 2)))

作为归约函数
(reduce transform-entry series) ; ...or reductions

关于clojure - 在 clojure 中迭代时间序列的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3237949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com