将函数应用于矩阵的每一列(或行)的最有效,最简洁的方法是什么?
假设我有一个矩阵,为简化起见,这里有一个最小的工作矩阵:
julia> mtx
4×2 Array{Float64,2}:
1.0 8.0
-Inf 5.0
5.0 -Inf
9.0 9.0
假设您必须将sortperm
应用于mtx
的每一列。
确保可以通过以下方式完成
:for i in 1:size(mtx)[2]
mtx[:,i] = sortperm(mtx[:,i])
end
julia> mtx
4×2 Array{Float64,2}:
2.0 3.0
1.0 2.0
3.0 1.0
4.0 4.0
但是使用map
或类似的方法,不是更简洁的方法吗?最后,您能否告诉我如何通过在Julia的文档中搜索哪些关键字来自己找到它?
答案 0 :(得分:3)
您正在寻找mapslices
:
julia> mtx = [1.0 8.0;-Inf 5.0;5.0 -Inf;9.0 9.0]
4×2 Array{Float64,2}:
1.0 8.0
-Inf 5.0
5.0 -Inf
9.0 9.0
julia> mapslices(sortperm, mtx; dims=1) # apply sortperm to every column of mtx
4×2 Array{Int64,2}:
2 3
1 2
3 1
4 4
摘自文档:
使用函数f转换数组A的给定维数。在形式为A [...,:,...,:,...]的A的每个切片上调用f。 dims是一个整数向量,指定冒号在此表达式中的位置。结果沿其余维度合并在一起。例如,如果dims为[1,2],A为4维,则对所有i和j都在A [:,:,i,j]上调用f。