2011-12-21 128 views
2

對於Incanter而言,並且想知道基於兩個列表的成對乘積的結果創建矩陣的矢量化解決方案是什麼樣子。更清晰,我有與從兩個矢量的外積創建矩陣的矢量化方法

(def x (pdf-poisson (range 4) :lambda 2.2)) 
(def y (pdf-poisson (range 4) :lambda 1.5)). 

創建兩個列表我現在想的4×4矩陣M,使得M(1,1)是x(1)和y(1),M的乘積(1,2)是x(1)和y(2)等的乘積。

在Octave中取外部產品很容易,所以希望Incanter也支持這一點。

我可以通過在矢量間映射函數來輕鬆地手動編寫代碼,但是如果可能的話,我想要一個慣用的或矢量化的方法。

感謝, JT

回答

2

剛剛發現在咒術克羅內克功能。矢量的克羅內克爾積是我所需要的。所以

(kronecker y-poisson x-poisson) 
1

與此端: -

(def x-poisson (pdf-poisson (range 4) :lambda 2.2)) 
(def y-poisson (pdf-poisson (range 4) :lambda 1.5)) 

(defn- poisson-mapper 
    "Takes a list of values from the PDF, and returns a closure that will multiply each 
    value in the list by p. Used to create the probability matrix" 
    [p_list] 
    (fn [p] (map #(* p %) p_list))) 

(def x-mapper (poisson-mapper x-poisson)) 

(def probabiliy-matix (matrix (map #(x-mapper %) y-poisson)))