Jaki jest najbardziej wydajny i idiomatyczny sposób łączenia dwóch lub więcej dużych wektorów? Właśnie to robiłem. W mojej aplikacji używam macierzy, więc każda operacja jest nieco droższa niż dodanie dwóch podwójnych. Używanie range
do kierowania zakładką jest nieco niezgrabne.Reduktory Clojure - efektywnie stosują funkcję do dwóch wektorów w równoleżniku
(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))))
obliczania też, że range
może skończyć się najbardziej kosztowny nieco na wielordzeniowych procesorów, ponieważ jest to jedyna część nierównoległe i obejmują sekwencje.
zakładam to 'mapv' zamiast' vmap'? –
Czy a i b faktycznie macierze zamiast wektorów? –
Czy możesz dalej opisać kształt swoich danych i rzeczywiste obliczenia? Możliwe, że coś w rodzaju core.matrix może lepiej pasować. –