2014-01-24 103 views
0

我的計劃是計算矩陣(矩陣/嵌套向量)的行或列的算術平均值。到目前爲止,我已經能夠計算行的算術平均值爲矩陣,即嵌套向量的算術平均值

(defn arithmean [x] 
(let [data x num (count data)] 
    (vec (apply map (fn [& items] 
      (/ (apply + items) num)) data)))) 

我更關心的是能輸入多個嵌套向量,沿東西線[X &參數]成之前的功能。但是也會對能夠計算矩陣內單個列的平均值感興趣。

回答

1

層的溶液爲小,功能清晰。

  • 返回單個集合的mean和呈現集合
  • 功能函數即可meaned,如果有幾個人。

功能...

(defn mean [cs] (/ (apply + cs) (count cs))) 

...返回一個集合的平均值。

要獲得mean館藏珍品的集合,定義...

(defn means [css] (vec (map mean css))) 

......雖然這也許是太小了,不值得命名。

矩陣(以您的方式)是列向量的向量,所以列意味着只是means

行手段

(fn [matrix] (means (transpose matrix))) 

其中一個矩陣的轉置是由

(defn transpose [matrix] (apply map vector matrix)) 

給它沒有多大關係是否定義這些功能在全球範圍(使用defn)或局部(使用fn)或只是引用身體。

您可以獨立調整解決方案的各個層次。例如,如果需要,以下是計算平均值的較快但較不明確的方式:

(defn mean [cs] 
    (loop [remains cs, total 0, n 0] 
    (if (empty? remains) 
     (/ total n) 
     (recur (next remains) (+ total (first remains)) (inc n))))) 
1

你有很多選擇,如果你只是做了COL在同一時間,你可以這樣做:

(defn mean [vals] 
    (apply/
     (reduce (fn [[tally count] val] 
        [(+ tally val) 
        (+ count 1)]) 
       [0 0] 
       vals))) 

(defn col-mean [vec-of-vec col] 
    (mean 
    (map (fn [v] 
      (nth v col)) 
     vec-of-vec))) 

你也可以將二者結合起來函數來計算每列的均值一次,基本上每行通過每行時,請保留[tally count]對。 - 我將把它作爲讀者的練習。

你可能想看看這個庫和相關的人(我不知道它,但它並不看壞)

https://github.com/mikera/core.matrix