将函数应用于矩阵的每一列

时间:2019-06-26 13:18:23

标签: matrix julia

将函数应用于矩阵的每一列(或行)的最有效,最简洁的方法是什么?

假设我有一个矩阵,为简化起见,这里有一个最小的工作矩阵:

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的文档中搜索哪些关键字来自己找到它?

1 个答案:

答案 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。