【问题标题】:How to check if a matrix is upper-triangular in clojure如何在clojure中检查矩阵是否为上三角形
【发布时间】:2014-02-06 06:31:23
【问题描述】:

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

【问题讨论】:

    标签: vector matrix clojure


    【解决方案1】:

    试试这个:

    (defn is-upper-triangular [m]
      (->> (map-indexed vector m)
           (mapcat (fn [[r v]] (take r v)))
           (every? zero?)))
    

    上面的代码从第一行取 0 个元素,从第二行取 1 个元素,从第三行取 2 个元素,等等……并检查所有取入的元素是否为零。如果全部为零,则为上三角形。

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

    【讨论】:

      【解决方案2】:

      upper-triangular? 尚未包含在 core.matrix API 中,但如果您使用 vectorz-clj,您可以通过 Java 互操作获得该函数:

      (def a (array :vectorz [[1 2] [0 4]]))
      
      (.isUpperTriangular a)
      => true
      
      (.isUpperTriangular (transpose a))
      => false
      

      【讨论】:

      • (def a (array :vectorz [[1 2] [0 4]])) 给出以下异常。我在 Windows 上使用 Leiningen。 CompilerException java.lang.RuntimeException:无法解析符号:此上下文中的数组,正在编译:(NO_SOURCE_PATH:1:8)
      • 听起来您需要先执行(use 'clojure.core.matrix) 才能将 core.matrix API 函数导入当前命名空间
      猜你喜欢
      • 2012-11-03
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      • 2013-05-02
      • 1970-01-01
      相关资源
      最近更新 更多