2015-05-16 3 views
7

Предположим, у меня есть 2-мерный массив, и я хочу применить несколько функций к каждому из своих столбцов. В идеале я хотел бы вернуть результаты в виде матрицы (с одной строкой на каждую функцию и по одному столбцу на каждый столбец ввода).Sapply (из R) эквивалент для Джулии?

В следующем коде генерируются значения, которые я хочу, но как массив массивов.

A = rand(10,10) 
[mapslices(f, A, 1) for f in [mean median iqr]] 

Другой подобный пример здесь [Julia: use of pmap with matrices

Есть ли лучший синтаксис для получения результатов обратно в виде 2 одномерного массива, вместо массива массивов?

Что я действительно хотел что-то с функциональностью, аналогичной sapply из Р. [https://stat.ethz.ch/R-manual/R-devel/library/base/html/lapply.html]

+0

Не «mapslices (f, A, 2)» применяют 'f' к _rows_ из ** A **, а не _columns_? – rickhg12hs

+1

Возможно, вы захотите просмотреть функцию ['aggregate'] (http://dataframesjl.readthedocs.org/en/latest/split_apply_combine.html) в [DataFrames] (https://github.com/) JuliaStats/DataFrames.jl). – rickhg12hs

ответ

7

Вы можете использовать анонимную функцию как в

mapslices(t -> [mean(t), median(t), iqr(t)], A, 1) 

, но с использованием постижений и splatting, так как в последнем примере, также хорошо. Для очень больших массивов вы можете избежать временных распределений, введенных транспозицией и splatting, но в большинстве случаев вам не нужно обращать на это внимание.

2

После игры вокруг немного я нашел один вариант, но я до сих пор интересно услышать, есть ли более эффективные способы делать это.

[[mapslices(f, A, 1)' for f in [mean median iqr]]...] 
Смежные вопросы