【发布时间】:2014-02-14 20:07:25
【问题描述】:
我想对矩阵的所有元素求一个特定数字的幂。 我有一个使用矩阵扩展的矩阵,设置如下:
let A matrix:make-constant 4 4 5
它给出了一个 4x4 矩阵,其中的值为 5
现在我想将矩阵中的所有元素取相同的幂,假设我想取它们的幂 2,然后我想得到一个数字为 25 的 4x4 矩阵。
我该怎么做?
【问题讨论】:
我想对矩阵的所有元素求一个特定数字的幂。 我有一个使用矩阵扩展的矩阵,设置如下:
let A matrix:make-constant 4 4 5
它给出了一个 4x4 矩阵,其中的值为 5
现在我想将矩阵中的所有元素取相同的幂,假设我想取它们的幂 2,然后我想得到一个数字为 25 的 4x4 矩阵。
我该怎么做?
【问题讨论】:
您可以通过多种方式做到这一点。最简单的可能是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 可能会包含在扩展中。请注意,矩阵是可变的,因此可以选择是否为结果构造一个新矩阵(如您所做的那样),或者是否就地改变内容。