Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 定义自定义sortperm函数_Sorting_Matrix_Mapping_Julia - Fatal编程技术网

Sorting 定义自定义sortperm函数

Sorting 定义自定义sortperm函数,sorting,matrix,mapping,julia,Sorting,Matrix,Mapping,Julia,在Julia中,假设我有以下矩阵: julia> rank = [[1.0,2.0,NaN] [5.0,3.0,1.0]] 3×2 Array{Float64,2}: 1.0 5.0 2.0 3.0 NaN 1.0 使用mapsicles和sortperm获得每列的排名,可以得到: r = mapslices(sortperm, rank; dims=1) 3×2 Array{Int64,2}: 1 3 2 2 3 1 问题在于NaN被视为“最差”

在Julia中,假设我有以下矩阵:

julia> rank = [[1.0,2.0,NaN] [5.0,3.0,1.0]]
3×2 Array{Float64,2}:
   1.0  5.0
   2.0  3.0
 NaN    1.0
使用
mapsicles
sortperm
获得每列的排名,可以得到:

 r = mapslices(sortperm, rank; dims=1)
3×2 Array{Int64,2}:
 1  3
 2  2
 3  1
问题在于
NaN
被视为“最差”元素,而不是保留在最终矩阵中。我最后想要的是:

3×2 Array{Int64,2}:
 1  3
 2  2
 NaN  1
我目前的解决方法是将
r
的每个元素与
rank
的元素进行比较。但我很肯定朱莉娅有一种更经典的方法:p

当前的解决方法:不够,因为需要在
mapslices
之后进行额外计算,以及创建另一个数组
new\r

nrow, ncol = size(r)
new_r = [Float64(ifelse(isnan(rank[i,j]), NaN, r[i,j])) for i in 1:nrow, j in 1:ncol]
NaN
在朱莉娅身上并不“特别”。它只是一个浮点值。如果要将
NaN
视为缺失值,应首先将其转换为
missing
,然后使用StatsBase.jl中的
ordinalrank
函数:

julia> rank = [[1.0,2.0,NaN] [5.0,3.0,1.0]]
3×2 Array{Float64,2}:
   1.0  5.0
   2.0  3.0
 NaN    1.0

julia> using StatsBase

julia> mapslices(rank; dims=1) do x
           ordinalrank(replace(x, NaN=>missing))
       end
3×2 Array{Union{Missing, Int64},2}:
 1         3
 2         2
  missing  1