【问题标题】:How to take power of each element in a matrix in Netlogo?如何在 Netlogo 中获取矩阵中每个元素的权力?
【发布时间】:2014-02-14 20:07:25
【问题描述】:

我想对矩阵的所有元素求一个特定数字的幂。 我有一个使用矩阵扩展的矩阵,设置如下:

let A matrix:make-constant 4 4 5

它给出了一个 4x4 矩阵,其中的值为 5

现在我想将矩阵中的所有元素取相同的幂,假设我想取它们的幂 2,然后我想得到一个数字为 25 的 4x4 矩阵。

我该怎么做?

【问题讨论】:

    标签: matrix netlogo


    【解决方案1】:

    您可以通过多种方式做到这一点。最简单的可能是matrix:times-element-wise。不幸的是,这仅适用于大于或等于 1 的整数幂:

    to-report matrix-power [ mat n ]
      repeat n - 1 [
        set mat matrix:times-element-wise mat mat
      ]
      report mat
    end
    

    您还可以将矩阵转换为列表列表,然后在其上使用 map 将每个元素提升到幂。这具有使用 0、分数幂和负数的优势:

    to-report matrix-power [ mat n ]
      report matrix:from-row-list map [ map [ ? ^ n ] ? ] matrix:to-row-list mat
    end
    

    map [ ? ^ n ] some-list 将列表的每个元素提升到n 的幂。 matrix:to-row-list 将矩阵转换为列表列表。因此,我们在matrix:to-row-list 的结果中应用map [ ? ^ n ]。然后,我们将结果转换回带有matrix:from-row-list 的矩阵。

    您可以将其概括为执行任何元素操作:

    to-report matrix-map [ function mat ]
      report matrix:from-row-list map [ map function ? ] matrix:to-row-list mat
    end
    

    那么,我们可以定义幂函数为:

    to-report matrix-power [ mat n ]
      report matrix-map task [ ? ^ n ] mat
    end
    

    【讨论】:

    • 酷用任务。如果在编写矩阵扩展时任务已经存在,那么matrix:map 可能会包含在扩展中。请注意,矩阵是可变的,因此可以选择是否为结果构造一个新矩阵(如您所做的那样),或者是否就地改变内容。
    • 扩展甚至可以只使用命令方块,对吧?无论如何,为它打开了一个功能请求:github.com/NetLogo/Matrix-Extension/issues/2
    • 好点,扩展程序可以为此使用报告块,甚至在我们完成一流任务之前。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多