Clojure阵列的性能问题

时间:2010-06-13 22:24:34

标签: performance arrays clojure

这段代码非常慢。从上网本上的slime-repl执行需要几分钟。

(def test-array (make-array Integer/TYPE 400 400 3))

(doseq [x (range 400), y (range 400), z (range 3)]
   (aset test-array x y z 0))

相反,这段代码运行得非常快:

(def max-one (apply max (map (fn [w] (apply max (map #(first %) w))) test-array)))
(def max-two (apply max (map (fn [w] (apply max (map #(second %) w))) test-array)))
(def max-three (apply max (map (fn [w] (apply max (map #(last %) w))) test-array)))

这是否与分块序列有关?我的第一个例子是错误的吗?

2 个答案:

答案 0 :(得分:7)

你正在进行Java反思。这篇博客文章有一个解决方法:

http://clj-me.cgrand.net/2009/10/15/multidim-arrays/

答案 1 :(得分:0)

您可以通过单一界面core.matrix提供的四种Clojure矩阵实现中的一种获得更好的性能:at clojarsat github