#r #arrays #multidimensional-array
#r #массивы #многомерный массив
Вопрос:
У меня есть массив a
размерности I x J
и массив b
размерности K
. Я хочу создать массив c
I x J x K
такой размерности c[i,j,k] = f( a[i,j], b[k] )
, чтобы для f
некоторой функции.
Я знаю, что это, очевидно, можно сделать с помощью цикла for, но это кажется излишне громоздким. Есть ли более удобный (векторизованный) способ сделать это?
Ответ №1:
Это можно сделать с outer(a, b, f)
помощью, например
a <- array(1:6, dim=c(2,3))
b <- array(1:4, dim = 4)
outer(a, b, function(a, b) a b/10)
#> , , 1
#>
#> [,1] [,2] [,3]
#> [1,] 1.1 3.1 5.1
#> [2,] 2.1 4.1 6.1
#>
#> , , 2
#>
#> [,1] [,2] [,3]
#> [1,] 1.2 3.2 5.2
#> [2,] 2.2 4.2 6.2
#>
#> , , 3
#>
#> [,1] [,2] [,3]
#> [1,] 1.3 3.3 5.3
#> [2,] 2.3 4.3 6.3
#>
#> , , 4
#>
#> [,1] [,2] [,3]
#> [1,] 1.4 3.4 5.4
#> [2,] 2.4 4.4 6.4
Создано 2020-12-07 пакетом reprex (версия 0.3.0)
Обратите внимание, что outer()
предполагается f
, что он векторизован; если нет, передайте Vectorize(f)
.