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