我查看了core.matrix尋找塊對角矩陣函數並搜索了Google,但沒有找到這樣的函數。這樣的功能是否存在?如果沒有人能指出我寫正確的方向寫這樣的功能。Clojure中的塊對角矩陣
樣本輸入將是沿嵌套向量的對角線輸出的嵌套向量。
符號示例: 設a,b,c,d爲矩陣(嵌套向量)。然後 一個例子的輸出如下所示
[[a 0 0 0] [0 b 0 0] [0 0 c 0] [0 0 0 d]]
其中d可以是[[0 1] [1 0]]。所有的
我查看了core.matrix尋找塊對角矩陣函數並搜索了Google,但沒有找到這樣的函數。這樣的功能是否存在?如果沒有人能指出我寫正確的方向寫這樣的功能。Clojure中的塊對角矩陣
樣本輸入將是沿嵌套向量的對角線輸出的嵌套向量。
符號示例: 設a,b,c,d爲矩陣(嵌套向量)。然後 一個例子的輸出如下所示
[[a 0 0 0] [0 b 0 0] [0 0 c 0] [0 0 0 d]]
其中d可以是[[0 1] [1 0]]。所有的
首先,需要一個函數來生成與注入到我個位置元件米大小Ñ的矢量。
(defn vec-i [m i n]
(-> (repeat n 0)
(vec)
(assoc-in [i] m)))
(vec-i 'a 0 10) => [a 0 0 0 0 0 0 0 0 0]
(vec-i 'b 2 7) => [0 0 b 0 0 0 0]
然後,只需與結果相結合的每個i(假設matrices
是你的對角線元素的列表)
(defn block-diag [matrices]
(let [n (count matrices)]
(vec (map-indexed #(vec-i %2 %1 n) matrices))))
(block-diag ['a 'b 'c 'd]) => [[a 0 0 0] [0 b 0 0] [0 0 c 0] [0 0 0 d]]
當然,ABCD可更換式符號。
庫Vectorz(提供的基本類型vectorz-CLJ)包括BlockDiagonalMatrix
類:
你將不得不使用Java的互操作現在進行實例化,但它提供了幾個advangtages:
長期來看,事實上,它可能是有道理的block-diagonal-matrix
功能添加到core.matrix
本身。事實上,我剛剛創建了一個問題,要做到這一點:
你找對角矩陣? https://github.com/mikera/vectorz-clj/blob/develop/src/main/clojure/mikera/vectorz/matrix.clj#L109 – edbond
只要對角元素可以是矩陣(嵌套向量)。 – sunspots
您能否提供示例輸入和輸出? – mishadoff