Применить функцию к каждому столбцу матрицы - PullRequest
1 голос
/ 26 июня 2019

Какой самый эффективный и краткий способ применить функцию к каждому столбцу (или строке) матрицы?

Предположим, у меня есть матрица, и, для простоты, минимальная рабочая матрица:

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 или чем-то подобным? Наконец, не могли бы вы сказать мне, как я мог найти его сам, выполнив поиск по ключевым словам в документации Джулии?

1 Ответ

3 голосов
/ 26 июня 2019

Вы ищете 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

Взято из документации:

Преобразовать заданные размеры массива A с помощью функции f,f вызывается на каждом срезе A вида A [...,:, ...,:, ...].dims - целочисленный вектор, указывающий, куда в этом выражении идут двоеточия.Результаты объединяются по остальным измерениям.Например, если dims равен [1,2] и A является 4-мерным, f вызывается в A [:,:, i, j] для всех i и j.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...