The result is transposed since that is what apply will give you
Examples
d1 <- 10
d2 <- 1e2
d3 <- 2e2
aa <- array(data = rnorm(d1*d2*d3), dim = c(d1, d2, d3))
bb <- rnorm(d3)
t1 <- apply(aa, 1, function(U) {U%*%bb})
t2 <- arma_mult_cube_vec(aa, bb)
dd <- t1 - t2
summary(dd)
#> V1 V2 V3
#> Min. :-1.954e-14 Min. :-1.243e-14 Min. :-2.132e-14
#> 1st Qu.:-3.553e-15 1st Qu.:-3.553e-15 1st Qu.:-8.882e-16
#> Median : 0.000e+00 Median : 0.000e+00 Median : 8.882e-16
#> Mean : 2.326e-16 Mean : 1.665e-16 Mean : 1.584e-15
#> 3rd Qu.: 3.553e-15 3rd Qu.: 3.553e-15 3rd Qu.: 5.329e-15
#> Max. : 2.132e-14 Max. : 2.487e-14 Max. : 2.132e-14
#> V4 V5 V6
#> Min. :-2.487e-14 Min. :-2.842e-14 Min. :-2.132e-14
#> 1st Qu.:-3.220e-15 1st Qu.:-3.553e-15 1st Qu.:-4.663e-15
#> Median : 0.000e+00 Median : 0.000e+00 Median : 0.000e+00
#> Mean :-2.040e-16 Mean :-9.215e-16 Mean :-1.061e-15
#> 3rd Qu.: 2.887e-15 3rd Qu.: 2.665e-15 3rd Qu.: 2.220e-15
#> Max. : 4.263e-14 Max. : 1.776e-14 Max. : 1.599e-14
#> V7 V8 V9
#> Min. :-2.132e-14 Min. :-1.776e-14 Min. :-1.421e-14
#> 1st Qu.:-3.553e-15 1st Qu.:-2.665e-15 1st Qu.:-3.553e-15
#> Median : 0.000e+00 Median : 0.000e+00 Median : 0.000e+00
#> Mean : 8.166e-16 Mean : 1.051e-15 Mean : 2.387e-17
#> 3rd Qu.: 5.329e-15 3rd Qu.: 3.664e-15 3rd Qu.: 3.553e-15
#> Max. : 2.132e-14 Max. : 2.487e-14 Max. : 2.132e-14
#> V10
#> Min. :-2.842e-14
#> 1st Qu.:-3.553e-15
#> Median : 0.000e+00
#> Mean :-4.990e-16
#> 3rd Qu.: 2.442e-15
#> Max. : 2.842e-14
image(dd)
table(dd)
#> dd
#> -2.8421709430404e-14 -2.48689957516035e-14 -2.1316282072803e-14
#> 2 2 5
#> -1.95399252334028e-14 -1.77635683940025e-14 -1.68753899743024e-14
#> 1 2 1
#> -1.4210854715202e-14 -1.24344978758018e-14 -1.06581410364015e-14
#> 15 4 24
#> -9.76996261670138e-15 -9.32587340685131e-15 -8.88178419700125e-15
#> 4 1 14
#> -8.65973959207622e-15 -7.99360577730113e-15 -7.7715611723761e-15
#> 1 6 1
#> -7.54951656745106e-15 -7.105427357601e-15 -6.77236045021345e-15
#> 2 55 1
#> -6.66133814775094e-15 -6.21724893790088e-15 -5.77315972805081e-15
#> 1 5 1
#> -5.32907051820075e-15 -5.10702591327572e-15 -4.9960036108132e-15
#> 27 1 1
#> -4.88498130835069e-15 -4.66293670342566e-15 -4.44089209850063e-15
#> 2 1 9
#> -4.21884749357559e-15 -4.10782519111308e-15 -3.77475828372553e-15
#> 2 1 3
#> -3.71924713249427e-15 -3.5527136788005e-15 -3.10862446895044e-15
#> 1 87 8
#> -2.99760216648792e-15 -2.83106871279415e-15 -2.66453525910038e-15
#> 2 1 13
#> -2.55351295663786e-15 -2.33146835171283e-15 -2.22044604925031e-15
#> 1 2 4
#> -2.1094237467878e-15 -1.99840144432528e-15 -1.88737914186277e-15
#> 2 3 2
#> -1.77635683940025e-15 -1.66533453693773e-15 -1.60982338570648e-15
#> 51 1 1
#> -1.55431223447522e-15 -1.4432899320127e-15 -1.33226762955019e-15
#> 2 2 8
#> -1.11022302462516e-15 -9.99200722162641e-16 -8.88178419700125e-16
#> 2 1 23
#> -6.66133814775094e-16 -4.44089209850063e-16 0
#> 1 6 145
#> 2.22044604925031e-16 4.44089209850063e-16 5.55111512312578e-16
#> 1 7 1
#> 6.66133814775094e-16 7.7715611723761e-16 8.88178419700125e-16
#> 2 1 26
#> 1.11022302462516e-15 1.33226762955019e-15 1.55431223447522e-15
#> 1 4 4
#> 1.66533453693773e-15 1.77635683940025e-15 1.99840144432528e-15
#> 2 60 4
#> 2.22044604925031e-15 2.24820162486594e-15 2.44249065417534e-15
#> 9 1 2
#> 2.66453525910038e-15 2.77555756156289e-15 2.88657986402541e-15
#> 13 2 1
#> 2.99760216648792e-15 3.10862446895044e-15 3.27515792264421e-15
#> 1 3 1
#> 3.33066907387547e-15 3.5527136788005e-15 3.99680288865056e-15
#> 2 77 7
#> 4.21884749357559e-15 4.44089209850063e-15 4.88498130835069e-15
#> 2 10 5
#> 5.32907051820075e-15 5.6621374255883e-15 5.77315972805081e-15
#> 39 1 7
#> 6.21724893790088e-15 6.66133814775094e-15 7.105427357601e-15
#> 7 3 46
#> 7.21644966006352e-15 7.32747196252603e-15 7.54951656745106e-15
#> 1 2 2
#> 7.99360577730113e-15 8.43769498715119e-15 8.88178419700125e-15
#> 4 1 9
#> 9.76996261670138e-15 1.04360964314765e-14 1.06581410364015e-14
#> 3 1 22
#> 1.11022302462516e-14 1.13242748511766e-14 1.24344978758018e-14
#> 1 1 6
#> 1.4210854715202e-14 1.59872115546023e-14 1.77635683940025e-14
#> 10 2 6
#> 2.1316282072803e-14 2.48689957516035e-14 2.8421709430404e-14
#> 9 2 1
#> 4.2632564145606e-14
#> 1
# microbenchmark::microbenchmark(apply(aa, 1, function(U) {U%*%bb}),
# arma_mult_cube_vec(aa, bb))