Qual è il modo più efficiente e idiomatico di combinare due o più vettori di grandi dimensioni insieme? Questo è quello che ho fatto. Nella mia applicazione sto usando le matrici, quindi ogni operazione è un po 'più costosa dell'aggiunta di due doppi. Usare range
per guidare la piega si sente un po 'goffo.Riduttori clojure - applicano efficacemente la funzione a due vettori in parallelo
(require '[clojure.core.reducers :as r])
(def a (mapv (fn [_] (rand 100)) (range 100000)))
(def b (mapv (fn [_] (rand 100)) (range 100000)))
(r/foldcat (r/map #(+ (a %) (b %)) (range (count a))))
calcolando inoltre che range
potrebbe finire per essere il bit più costoso su CPU multi-core poiché è l'unica parte non paralleli e coinvolgere sequenze.
Penso che sia 'mapv' invece di' vmap'? –
A e b sono effettivamente matrici invece di vettori? –
Puoi descrivere ulteriormente la forma dei tuoi dati e il calcolo reale? È possibile che qualcosa come core.matrix possa essere una soluzione migliore. –