我有:
(def data [[1 3 4 7 9] [7 6 3 2 7] [1 9 8 6 2]])
Run Code Online (Sandbox Code Playgroud)
我想平均这些(元素明智得到):
[3 6 5 5 6]
Run Code Online (Sandbox Code Playgroud)
就像你在MATLAB中一样:
mean([1 3 4 7 9; 7 6 3 2 7; 1 9 8 6 2])
Run Code Online (Sandbox Code Playgroud)
有了Incanter,我可以这样做:
(map #(/ % (count m)) (apply plus data))
Run Code Online (Sandbox Code Playgroud)
如果数据相当大(我有很多),有更好的方法吗?事先
算出来有帮助(count m)吗?
它是否有助于defn在#(/ % (count m))事先?
这是一个非常简洁的方法:
(def data [[1 3 4 7 9] [7 6 3 2 7] [1 9 8 6 2]])
(defn average [coll]
(/ (reduce + coll) (count coll)))
(defn transpose [coll]
(apply map vector coll))
(map average (transpose data))
=> (3 6 5 5 6)
Run Code Online (Sandbox Code Playgroud)
截至2013年,我的建议是只使用core.matrix.stats导入所有这些功能:
(mean [[1 3 4 7 9] [7 6 3 2 7] [1 9 8 6 2]])
=> [3.0 6.0 5.0 5.0 6.0]
Run Code Online (Sandbox Code Playgroud)
core.matrix.stats构建于core.matrix API之上,因此它也可用于其他更优化的向量和矩阵实现 - 如果您正在进行大量的重矩阵处理,这可能是更好的选择.
在不知道如何使用任何incanter的情况下,这是您“从头开始”的方法。
(let [data [[1 3 4 7 9] [7 6 3 2 7] [1 9 8 6 2]]
num (count data)]
(apply map (fn [& items]
(/ (apply + items) num))
data))
;=> (3 6 5 5 6)
Run Code Online (Sandbox Code Playgroud)