Consider this simple matrix number multiplication:
lth = 200;
mtx = RandomReal[{0, 1}, {lth, lth}];
ls = RandomReal[{0, 1}, {lth}];
Et = Function[{t}, Sin[(π t)/20] Sin[2 t]];
Etc = Compile[{{t, _Real}}, Et[t],
CompilationOptions -> {"InlineCompiledFunctions" -> True,
"InlineExternalDefinitions" -> True}];
Table[Etc[t]*mtx;, {t, 0., 20, 0.01}]; // AbsoluteTiming
(* {0.244659, Null} *)
It seems that this is very slow, compared to matrix vector multiplication:
Table[mtx.ls;, {t, 0., 20, 0.01}]; // AbsoluteTiming
(* {0.038151, Null} *)
Moreover, the matrix addition also seems to be slow
Table[mtx + mtx;, {t, 0., 20, 0.01}]; // AbsoluteTiming
(* {0.153648, Null} *)
**Question:** So why the matrix number multiplication and addition so much slower than the matrix vector multiplication? Are there ways to speed them up?
I'm using 10.3 on OS X 10.11.4.
---
**Edit**
The slowness of the matrix number multiplication doesn't seem to come from `Etc`, for example:
Table[Etc[t];, {t, 0., 20, 0.01}]; // AbsoluteTiming
(* {0.001614, Null} *)
Table[1.*mtx;, {t, 0., 20, 0.01}]; // AbsoluteTiming
(* {0.235871, Null} *)
---
**Edit 2**
Here is a comparison to Matlab:
lth=200;
mtx=rand(lth);
ls=rand(lth,1);
tic;
for t=0:0.01:20
mtx2=1.*mtx;
end
toc
tic;
for t=0:0.01:20
mtx2=mtx*ls;
end
toc
> Elapsed time is 0.034530 seconds.
> Elapsed time is 0.015745 seconds.
Mathematica is as fast as Matlab in matrix vector multiplication, but about 7X slower in the matrix number multiplication.