Векторизованный подход к созданию матрицы из внешнего произведения двух векторов - PullRequest
2 голосов
/ 21 декабря 2011

Новичок в Incanter, и ему было интересно, как будет выглядеть векторизованное решение для создания матрицы на основе результатов парного произведения двух списков. Чтобы быть более понятным, у меня есть два списка, которые я создаю с

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

Теперь я бы хотел матрицу 4x4 M, такую, чтобы M (1,1) было произведением x (1) и y (1), M (1,2) было произведением x (1) и y ( 2) и т. Д.

Легко взять внешний продукт в Octave, поэтому надеялся, что Incanter поддержит это.

Я легко могу написать код, сопоставив функцию по векторам, но хотел идиоматического или векторизованного подхода, если это возможно.

Спасибо, JT

Ответы [ 2 ]

2 голосов
/ 23 декабря 2011

Только что нашел функцию Кронекера в Incanter.Произведение Кронекера векторов - это то, что мне нужно.Итак

(kronecker y-poisson x-poisson)
1 голос
/ 22 декабря 2011

Закончено этим: -

(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)))
...