gpt4 book ai didi

performance - Clojure 性能,大向量上的大循环

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

我正在对大小为 50,000 个元素的两个向量执行逐元素操作,并且遇到了令人不满意的性能问题(几秒钟)。是否存在任何明显的性能问题,例如使用不同的数据结构?

(defn boolean-compare
"Sum up 1s if matching 0 otherwise"
[proposal-img data-img]
(sum
(map
#(Math/abs (- (first %) (second %)))
(partition 2 (interleave proposal-img data-img)))))

最佳答案

尝试这个:

(apply + (map bit-xor proposal-img data-img)))

一些注意事项:
  • map ping 一个函数到多个集合使用每个集合中的一个元素作为函数的参数 - 无需 interleavepartition为了这。
  • 如果您的数据是 1 和 0,则 xor会比绝对差要快

  • 定时示例:
    (def data-img (repeatedly 50000 #(rand-int 2)))
    (def proposal-img (repeatedly 50000 #(rand-int 2)))
    (def sum (partial apply +))

    JVM 预热后...
    (time (boolean-compare proposal-img data-img))
    ;=> "Elapsed time: 528.731093 msecs"
    ;=> 24802

    (time (apply + (map bit-xor proposal-img data-img)))
    ;=> "Elapsed time: 22.481255 msecs"
    ;=> 24802

    关于performance - Clojure 性能,大向量上的大循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16533656/

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