包含混合向量和双精度的向量的 Clojure 减少函数

Posted

技术标签:

【中文标题】包含混合向量和双精度的向量的 Clojure 减少函数【英文标题】:Clojure reduce function for vector containing mixture vectors and doubles 【发布时间】:2019-03-20 12:05:10 【问题描述】:

我想求和一个包含双精度和向量混合的向量。有点像,

[[1 2 1 [1 2 3]] [1 2 4 [1 1 1]]...]

我想总结一下,我得到类似的东西,

[212 12 444 [11 2 12]]

有没有一种有效的方法来使用核心 clojure 函数(如 reduce 或 map)来做到这一点?

【问题讨论】:

你是如何从[1 2 1 [1 2 3]]212 的? 顺便说一句,确保你read this 请添加您已经尝试过的代码。由于该示例已经有些不清楚,因此如果您编写一些测试用例,它确实会有所帮助。结合您的尝试,我们会遇到一个失败的场景,并且可以从那里改进。 【参考方案1】:

认为您想要一个添加嵌套向量结构的函数,以便(nvadd [1 2 1 [1 2 3]] [1 2 4 [1 1 1]]) 的计算结果为[2 4 5 [2 3 4]]。然后,您可以使用该函数 reduce 您的此类向量的向量。

(defn nvadd [a b]
  (mapv #(if (vector? %1)
           (nvadd %1 %2)
           (+ %1 %2))
        a b))

这假设输入格式正确。

【讨论】:

这比我想出的解决方案要巧妙得多,谢谢!

以上是关于包含混合向量和双精度的向量的 Clojure 减少函数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Clojure 中递归展平任意嵌套的向量和映射?

为啥没有窥视! clojure 瞬态向量的函数?

将 NEON 组件与非向量函数混合

管理 C++ 单精度和双精度混合计算的规则是啥?

Clojure 中的可插拔向量处理单元

在 Clojure 中添加向量的惯用方法是啥?