Vector 如何在clojure中检查矩阵是否为上三角形

Vector 如何在clojure中检查矩阵是否为上三角形,vector,matrix,clojure,Vector,Matrix,Clojure,我想写一个函数来计算矩阵的上三角性质。假设a_i_j是第i行和第j列中的数字。矩阵是 对于所有i>j,如果a_i_j=0,则为上三角形 试试这个: (defn is-upper-triangular [m] (->> (map-indexed vector m) (mapcat (fn [[r v]] (take r v))) (every? zero?))) 上面的代码从第一行获取0个元素,从第二行获取1个元素,从第三行获取2个元素,以此类推。。。

我想写一个函数来计算矩阵的上三角性质。假设a_i_j是第i行和第j列中的数字。矩阵是 对于所有i>j,如果a_i_j=0,则为上三角形

试试这个:

(defn is-upper-triangular [m]
  (->> (map-indexed vector m)
       (mapcat (fn [[r v]] (take r v)))
       (every? zero?)))
上面的代码从第一行获取0个元素,从第二行获取1个元素,从第三行获取2个元素,以此类推。。。并检查所有获取的元素是否为零。如果全部为零,则为上三角形


此代码不检查给定的矩阵是否为正方形。如果有必要,您可以添加此检查。

上三角?
尚不在
核心.matrix
API中,但如果使用
vectorz clj
您可以使用Java interop获取函数:

(def a (array :vectorz [[1 2] [0 4]]))

(.isUpperTriangular a)
=> true

(.isUpperTriangular (transpose a))
=> false

(defa(数组:vectorz[[1 2][0 4]])给出了以下异常。我在windows上使用Leiningen。CompilerException java.lang.RuntimeException:无法解析symbol:array在此上下文中,编译:(NO_SOURCE_PATH:1:8)听起来您需要先执行
(使用'clojure.core.matrix)
将core.matrix API函数导入当前命名空间