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

Matrix 将函数应用于矩阵的每一列,matrix,julia,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[:

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

假设我有一个矩阵,简化一下,一个最小工作矩阵:

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

您正在寻找:

摘自文件:

使用函数f变换数组A的给定维数。在形式为A[…,:,,:,,,,,…]的A的每个片上调用f。dims是一个整数向量,指定冒号在此表达式中的位置。结果将沿其余维度连接。例如,如果dims为[1,2],A为四维,则对所有i和j的A[:,:,i,j]调用f


以扩展@crstnbr编写的内容。如果您想要一个就地操作(如您的问题中所述),那么编写类似于foreach(sort!、eachcol(mtx))的代码。但是,请注意,这将不适用于
sortperm
作为其就地版本
sortperm
要求向量为
整数
而不是
浮点64
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