[R] Help with multidimensional array

Giuseppe neox86 at gmail.com
Tue Mar 29 02:56:45 CEST 2011


Dennis,

Yes, Reduce works, but unfortunately it does not speed up the
evaluation time (actually, it makes it a little bit slower).

Thank you anyway.



On Tue, Mar 29, 2011 at 2:21 AM, Dennis Murphy <djmuser at gmail.com> wrote:
> Hi:
>
> Is this what you're after?
>
> m <- array(1:27, c(3, 3, 3))
> xx <- 1:3
> Reduce('+', lapply(xx, function(k) xx[k] * m[, , k]))
>
>> m
> , , 1
>
>      [,1] [,2] [,3]
> [1,]    1    4    7
> [2,]    2    5    8
> [3,]    3    6    9
>
> , , 2
>
>      [,1] [,2] [,3]
> [1,]   10   13   16
> [2,]   11   14   17
> [3,]   12   15   18
>
> , , 3
>
>      [,1] [,2] [,3]
> [1,]   19   22   25
> [2,]   20   23   26
> [3,]   21   24   27
>
>> xx <- 1:3
>> Reduce('+', lapply(xx, function(k) xx[k] * m[, , k]))
>      [,1] [,2] [,3]
> [1,]   78   96  114
> [2,]   84  102  120
> [3,]   90  108  126
>
> HTH,
> Dennis
>
>
> On Mon, Mar 28, 2011 at 4:10 PM, Giuseppe <neox86 at gmail.com> wrote:
>>
>> I have the following situation.
>>
>> H12 is an array of dimension (n,k,m) and hessian_lambda is a numeric
>> of length m.
>>
>> I need to multiply each matrix H12[,,1], H12[,,2], ..., H12[,m] by
>> hessian_lambda[1], hessian_lambda[2], ..., hessian_lambda[m],
>> respectively, and then add the resulting (n,k) matrices. What I am
>> using at the moment is the following code:
>>
>> H <- matrix(0, n, k)
>>  for(j in 1:(m)) {
>>        H <- H + H12[,,j]*hessian_lambda[j]
>>  }
>>
>> Does anybody see a way to speed up this without using loop? (The
>> output needs to be a matrix).
>>
>> Thank you for your time.
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>
>



More information about the R-help mailing list