我正在處理大量數據,處理類型取決於正在處理的數據。最終目標是爲每個行的每個元素都有一個功能,可以有效執行。下面只是一個使用平均值劃分的例子,但我試圖找到一個可以應用任何函數的解決方案。定義數據特定的Clojure函數,可能與宏?
說我想讀入一個向量的向量的數字,並返回第一個數字除以其位置的平均數和第二個數字減去最小數的結果。
實施例:
輸入:
(def inputs
[[1.0,1.0]
[2.0,4.0]
[3.0,9.0]])
平均值:
(def avgs
[2.0,7.0])
Mininums:
(def mins
[1.0,1.0])
輸出:
個(def outputs
[[0.50,0.00]
[1.00,3.00]
[1.50,8.00]])
指令:
(DEF平均的IDS [0]) (DEF subtr-ID爲[1])
天真的方法是查找除數對於每個位置:
(defn avg-elem [element position]
(/ element (nth avgs position)))
(defn subtr-elem [element position]
(- element (nth mins position)))
(mapv
#(map-indexed
(fn [elem idx] (if (is-avg-idx? idx) (avg-elem elem idx) (subtr-elem elem idx)))
%)
inputs)
我想什麼做的是以下幾點:
(fn [elem] (/ elem 2.0))
(fn [elem] (- elem 1.0))
並且具有某種函數將相應的函數應用於每行中的每個元素。
我不清楚你的意思是「一種可以應用任何功能的解決方案」。 Clojure的序列處理原語沒有提供什麼?你能舉一個更好的例子嗎?說實話,這聽起來像是你在設計時沒有清楚地知道你的要求是什麼。 – Alex 2014-09-26 21:27:40
本質上,我正在尋找處理矢量(矩陣)的矢量,如圖所示。當我收到矩陣時,我會收到每列的指令列表。每個指令對應一個函數。應用程序必須能夠靈活地在將來包含新的指令和功能。現在,我使用類似於天真的方法,而且效率很低。 – user1559027 2014-09-26 22:19:30