假设我有一个Clojure矩阵A
(为清晰起见而格式化)
[[1 4 3]
[1 7 3]
[1 8 3]]
现在假设我想要更新第一列,例如:将它乘以因子2,以便新矩阵变为
[[2 4 3]
[2 2 3]
[2 8 3]]
如何在clojure中做到这一点?我尝试了assoc
之类的内容和
(join-along 1 (* (slice A 1 0) 2) (select A [0 1 2] [2 3]))
当然没有用。如果对于矩阵有assoc
这样的东西会很棒。
(massoc A [rows] [columns] replacement-vector)
或类似Python中的numpy
之类的东西:
A[:,0]*2 = [[2 4 3]
[2 2 3]
[2 8 3]]
由于
答案 0 :(得分:1)
您应该查看clojure.core/matrix并查看它是否支持此类操作。
这可能是您正在寻找的东西。将此值更改为assoc
新值而不是在应用函数后更新应该是微不足道的。
(defn mupdate-in
"Update all `coll' rows at `column' with `f'"
[coll column f & args]
(reduce #(apply update-in %1 [%2 column] f args)
coll
(range (count coll))))
一个例子:
(def m [[1 4 3]
[1 7 3]
[1 8 3]])
(mupdate-in m 0 * 2)
;; [[2 4 3]
;; [2 7 3]
;; [2 8 3]]
(mupdate-in m 2 + 10)
;; [[1 4 13]
;; [1 7 13]
;; [1 8 13]]