Clojure Matrix равенства, Clojure для машинного обучения - PullRequest
0 голосов
/ 19 мая 2018

Я пытаюсь понять эту функцию:

(defn mat-eq
  "Checks if two matrices are equal"
  [A B]
   (and (= (count A) (count B))
        (reduce #(and %1 %2) (map = A B))))

"Сначала мы сравниваем длины строк двух матриц, используя функции count и =, а затем используем функцию Reduce для сравнения внутренних векторных элементов.«.Я не понимаю эту часть: «По сути, функция Reduce неоднократно применяет функцию, которая принимает два аргумента для последовательных элементов в последовательности и возвращает конечный результат, когда все элементы в последовательности были уменьшены прикладной функцией».Может кто-нибудь объяснить эту часть: (уменьшить # (и% 1% 2) (карта = AB))

1 Ответ

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

map может принимать несколько коллекций вместо одной.

Вы можете увидеть эту работу, запустив что-то вроде

(map (fn [i x]
       (println i x))
     (range) ; The first collection
     ["A" "B" "C"]) ; The second collection

0 A
1 B
2 C
=> (nil nil nil)

Этот пример также можно просто записать как

(map println (range) ["A" "B" "C"])

Количество коллекций, присвоенных map решает, сколько аргументов нужно передать функции отображения.Поскольку я дал здесь две коллекции для map, функция отображения должна принимать два параметра;i и x в этом случае.

В вашем примере map также принимает две коллекции, A и B.Поскольку = принимает любое количество аргументов, его можно использовать здесь для проверки того, что каждый элемент в одной коллекции совпадает с элементом с тем же индексом в другой коллекции.

Или, другими словами

(mapv = [1 2 3] [1 2 4])

Это то же самое, что и

[(= 1 1)
 (= 2 2)
 (= 3 4)] ; Note that they differ here

, который возвращает [true true false].Последнее является ложным, потому что последние элементы каждой коллекции не совпадают.

Это попарная проверка равенства двух коллекций.

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