Предположим, что у Джулии есть следующая матрица:
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
Использование mapslices
и 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]