首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在clojure中迭代时间序列的问题

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

Stack Overflow用户
提问于 2010-07-13 22:05:24
回答 2查看 445关注 0票数 8

我有以下问题:我有一个超过10000个条目的时间序列,我想对每个条目执行一些计算。这本身不是问题,但我需要得到最后一个计算值,以便获得下一个值。我所需要的非常简单的形式如下所示:

Val(n) = Val(n-1) + (time-series-entry / 2) (或者类似的东西!)

我不知道该如何处理这件事。简单地做这样的事情:

代码语言:javascript
复制
(defn calc-val
  [time-series element]
  (seq (cons (generate-val-element time-series element)
             (calc-val time-series (inc element)))))

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

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

EN

回答 2

Stack Overflow用户

发布于 2010-07-13 22:49:30

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

下面,transform-first-entry对第一个条目执行您想做的任何操作(如果您不需要以任何方式转换它,只需省略reduce / reductions的第一个参数,并使用entries而不是(rest entries作为最后一个参数);transform-entry是一个函数,它接受转换前一个条目和当前条目的结果(按此顺序),并为当前条目生成转换结果。

代码语言:javascript
复制
;;; 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是懒惰的。

假设您想要保持第一个条目不变,并将示例转换从问题文本应用到后续条目,您可以使用

代码语言:javascript
复制
(defn transform-entry [prev-transformed current]
  (+ prev-transformed
     (/ current 2)))

中的归约函数

代码语言:javascript
复制
(reduce transform-entry series) ; ...or reductions
票数 7
EN

Stack Overflow用户

发布于 2010-07-13 22:22:31

如果您只是想要一个提示,可以研究一下使用partition

获取比提示更多的信息,…

代码语言:javascript
复制
(defn calc-val
  [time-series element]
  (let [p (partition 2 1 time-series)]
    (for [t p]
      (let [first-value (first t)
            second-value (second t)]
        (do whatever you need to here)))))

虽然这还没有经过测试,但它应该可以工作或接近工作:)

说明

(partition n i seq)seq分成长度为n (在本例中为2)和重叠i (在本例中为1)的部分,然后使用for遍历这些部分,并对这些部分做我们想做的事情。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3237949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档