Clojure порождающие матрицы - PullRequest
0 голосов
/ 18 мая 2018

Я собираюсь выбросить книгу Clojure для машинного обучения, и я не понимаю одну часть одной функции.

 (defn square-mat
  "Creates a square matrix of size n x n whose
   elements are all e. Accepts an option argument
   for the matrix implementation"
   [n e & {:keys [implementation]
    :or {implementation :persistent-vector}}]
   (let [repeater #(repeat n %)]
   (matrix implementation (-> e repeater repeater))))

(defn id-mat
 "Creates an identity matrix of n x n size"
 [n]
 (let [init (square-mat :clatrix n 0)
  identity-f (fn [i j n]
               (if (= i j) 1 n))]
 (cl/map-indexed identity-f init)))

В этой второй функции я не понимаю эту часть (if (= ij)чем 1 еще п).Почему еще п?размер

1 Ответ

0 голосов
/ 18 мая 2018

Посмотрите на определение из clatrix/map-indexed.Он принимает функцию трех аргументов (индекс строки, индекс столбца и элемент в этой позиции) и матрицу.

Во внутренней функции (fn [i j n] (if (= i j) 1 n), n связан не сколичество строк в матрице, но значение в позиции (i, j), которое всегда равно нулю, потому что матрица init была инициализирована нулями.

Похоже, книга используеточень запутанная запись (поскольку n связана с количеством строк в матрице внешней функции, было бы лучше назвать третий аргумент внутренней функции x или как-то еще), но функция все равно должнаработа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...