Проблема производительности с массивом Clojure - PullRequest
5 голосов
/ 14 июня 2010

Этот фрагмент кода очень медленный.Выполнение из 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 ]

7 голосов
/ 14 июня 2010

Вы попали в рефлексию Java.Это сообщение в блоге имеет обходной путь:

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

0 голосов
/ 05 ноября 2013

Вы можете получить лучшую производительность от одной из четырех реализаций матрицы Clojure, доступных через единый интерфейс core.matrix: в clojars , в github .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...