# How to multiply a matrix to another cell matrix

17 views (last 30 days)
Pooneh Shah Malekpoor on 14 May 2021
Edited: Stephen23 on 14 May 2021
Hello
I have a 3*3 matrix such as
[1 0 0;
8 23 1;
5 7 10]
On the other hand, I have matrix 2000*1 containing 2000 cell arrays which are 3*4 matrices such as
[ [3*4];
[3*4];
[3*4];
.
.
]
I want to multiplythis 3*3 matrix to each of 3*4 matrices in the big matrix and obtain a final 2000*1 matrix. I have seen the code @(x)x.*matrix in MATLAB forum.
However, it gives out a function handle..I need to use the numeric output. What should i do?
David Hill on 14 May 2021
You need to explain more. How are you getting a 2000x1 matrix? What do you mean when you say multiply? 3x3 * 3x4 = 3x4 matrix, you cannot perform element-wise multiplication on different sized matrices.

Stephan on 14 May 2021
Edited: Stephan on 14 May 2021
Use cellfun:
A = magic(3)
A = 3×3
8 1 6 3 5 7 4 9 2
C = {rand(3,4); rand(3,4); rand(3,4); rand(3,4); rand(3,4)}
C = 5×1 cell array
{3×4 double} {3×4 double} {3×4 double} {3×4 double} {3×4 double}
result = cellfun(@(x)mtimes(A,x),C,'UniformOutput',false)
result = 5×1 cell array
{3×4 double} {3×4 double} {3×4 double} {3×4 double} {3×4 double}
C{1}
ans = 3×4
0.7660 0.7423 0.4707 0.8602 0.4490 0.2799 0.8553 0.2608 0.4265 0.9783 0.5613 0.8271
result{1}
ans = 3×4
9.1360 12.0880 7.9885 12.1046 7.5281 10.4742 9.6180 9.6741 7.9578 7.4446 10.7034 7.4423
Stephen23 on 14 May 2021
"Is there any faster approach?"
Use a loop (with preallocation).

Jan on 14 May 2021
Edited: Jan on 14 May 2021
Create a simple loop:
A = rand(3, 3);
for iC = 1:numel(C) % Where C is your cell
C{iC} = A * C{iC};
end
The approach with cellfun looks smart, but it is slower:
C = cellfun(@(c) A*c, C, 'UniformOutput', false);
By the way, .* is the elementwise operation. You need *, because the matrix and the cell elements do not have the same number of elements.
##### 2 CommentsShowHide 1 older comment
Stephen23 on 14 May 2021
"will this be faster than cellfun for a big number of operations? "
Yes.
Try it.