#matrix #clojure #incanter
#матрица #clojure #incanter
Вопрос:
Как изменить элемент в матрице? Согласно документу Incanter, библиотека построена поверх Clatrix. С помощью Clatrix установите элемент в матрице с помощью команды (set A 1 2 0)
. Пожалуйста, прокомментируйте, как установить элемент в incanter. Спасибо.
(ns cljsl.optimization
(:require [incanter.core :as i]
[incanter.stats :as s]))
;; create a matrix
cljsl.examples=> (def A (i/matrix [[0 1 2] [3 4 5]]))
cljsl.examples=> A
A 2x3 matrix
-------------
0.00e 00 1.00e 00 2.00e 00
3.00e 00 4.00e 00 5.00e 00
;; the view the item
cljsl.examples=> (i/$ 0 0 A)
0.0
;; element can be set with Clatrix, unfortunately, it don't correct with Incanter.
cljsl.examples=> (cl/set A 1 2 0)
Ответ №1:
(require '[clojure.core.matrix :as m])
(m/mset! A 0 0 -1)
Комментарии:
1. Спасибо. Могу я задать вопрос? В чем разница между with или without (‘) перед «[«?
2. Я получил сообщение об ошибке «Нет реализации метода : :set-2d!». Я использую [incanter «1.5.7»] с clojure «1.10.1», incanter 1.9.3 несовместим с clojure «1.10.1», в любом случае, спасибо за вашу помощь.
Ответ №2:
Спасибо за помощь. После просмотра книги Clojure for Machine Learning
и. Clojure for Data Science
Найдены процедуры для исправления ошибки.
- добавление следующей зависимости в
project.clj
файл.[clatrix "0.5.0"]
- Объявление пространства имен
(ns cljsl.optimization (:require [clatrix.core :as cl] [incanter.core :as i] [incanter.stats :as s]))
- Тестирование
cljsl.optimization=> (def A (i/matrix [[0 1 2] [3 4 5]])) #'cljsl.optimization/A cljsl.optimization=> A A 2x3 matrix ------------- 0.00e 00 1.00e 00 2.00e 00 3.00e 00 4.00e 00 5.00e 00 ljsl.optimization=> (cl/set A 1 2 0) #object[org.jblas.DoubleMatrix 0x1c951881 "[0.000000, 1.000000, 2.000000; 3.000000, 4.000000, 0.000000]"] cljsl.optimization=> A A 2x3 matrix ------------- 0.00e 00 1.00e 00 2.00e 00 3.00e 00 4.00e 00 0.00e 00