Matrix 如何在Netlogo中利用矩阵中每个元素的力量?

Matrix 如何在Netlogo中利用矩阵中每个元素的力量?,matrix,netlogo,Matrix,Netlogo,我想把矩阵的所有元素都取为特定数的幂。 我有一个使用矩阵扩展的矩阵,设置如下: let A matrix:make-constant 4 4 5 它给出了一个4x4矩阵,其中的值为5 现在我想把矩阵中的所有元素都取到相同的幂,所以假设我想把它们取到幂2,然后我想得到一个4x4的矩阵,数字是25 我该怎么做呢?你可以用几种方法来做。最简单的方法可能是使用matrix:times-element-wise。不幸的是,这仅适用于大于或等于1的整数幂: to-report matrix-power [

我想把矩阵的所有元素都取为特定数的幂。 我有一个使用矩阵扩展的矩阵,设置如下:

let A matrix:make-constant 4 4 5
它给出了一个4x4矩阵,其中的值为5

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


我该怎么做呢?

你可以用几种方法来做。最简单的方法可能是使用
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
您还可以将矩阵转换为列表列表,然后使用该列表上的映射将每个元素提升为幂。这具有使用0、分数次幂和负数的优点:

to-report matrix-power [ mat n ]
  report matrix:from-row-list map [ map [ ? ^ n ] ? ] matrix:to-row-list mat
end
map[?^n]一些列表
将列表中的每个元素提升到
n
的级别<代码>矩阵:到行列表将矩阵转换为列表列表。因此,我们将
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
。请注意,矩阵是可变的,因此可以选择是否为结果构造新矩阵(如您所做的),或者是否就地修改内容。扩展甚至可以只使用命令块,对吗?无论如何,我们为它打开了一个功能请求:好的观点,扩展可以为此使用一个reporter块,甚至在我们有一流的任务之前。