Eva*_*n E 4 linear-algebra numerical-methods julia
给定一个维度为 m,n 的矩阵 A,如何通过 Julia 中的某个函数或其他过程对该矩阵的列进行归一化(目标是对 A 的列进行归一化,以便我们的新矩阵的列长度为 1)?
mapslices似乎在性能方面存在一些问题。在我的计算机(和 v1.7.2)上,速度快了 20 倍:
x ./ norm.(eachcol(x))'
Run Code Online (Sandbox Code Playgroud)
这是一个就地版本(因为eachcol创建了视图),速度更快(但仍然分配了一点):
normalize!.(eachcol(x))
Run Code Online (Sandbox Code Playgroud)
最后,一些循环版本比mapslices5x3 矩阵快 40-70 倍:
# works in-place:
function normcol!(x)
for col in eachcol(x)
col ./= norm(col)
end
return x
end
# creates new array:
normcol(x) = normcol!(copy(x))
Run Code Online (Sandbox Code Playgroud)
编辑:添加了零分配的单行:
foreach(normalize!, eachcol(x))
Run Code Online (Sandbox Code Playgroud)
与 不同,它不分配任何内容的原因normalize!.是它foreach不返回任何内容,这使得它在不需要输出的情况下很有用。