2016-02-19 2 views
1

В Clojure 2D-массив может быть инициализирован со значением, как так:Clojure/core.matrix/инициализировать массив 2d

(defn vec2d 
    "Return an x by y vector with all entries equal to val." 
    [x y val] 
    (vec (repeat y (vec (repeat x val))))) 

Есть ли возможно core.matrix встроенную функцию, которая будет делать работа?

ответ

1

Вы можете использовать new-matrix и fill:

(require '[clojure.core.matrix :as matrix]) 

(defn vec2d 
    "Return an x by y vector with all entries equal to val." 
    [x y val] 
    (matrix/fill (matrix/new-matrix y x) val)) 

Если вам нужен результат, чтобы быть регулярный вектор 2D Clojure, вы можете вызвать to-nested-vectors на результат. В этот момент, тем не менее, вам, вероятно, лучше всего использовать оригинальное решение из вашего вопроса.

+0

Не является ли новая матрица, производящая обычные вложенные векторы клоюра? Я обнаружил, что следующее возвращает true: (пусть [mat (m/new-matrix 2 2)] (= (m/to-nested-vector mat)) mat)) –

+0

@AntonHarald Да, но 'fill' не , –

Смежные вопросы