Multiply cell doubles with a matrix

I have a cell array A which has 1*5 cell, each cell has 12*1 doubles.
How multiply those 12*1 doubles with a MATRIX call B with 12*500 ?
Thank you

 Accepted Answer

Andrei Bobrov
Andrei Bobrov on 13 Jul 2016
Edited: Andrei Bobrov on 13 Jul 2016
out = bsxfun(@times,permute(cell2mat(A),[1,3,2]),B); % out - 3D double array
or
out = cellfun(@(x)bsxfun(@times,x,B),A,'un',0); % here out - cell array (1 x 5)

7 Comments

Error using cell2mat (line 52) CELL2MAT does not support cell arrays containing cell arrays or objects.
or
Error using bsxfun Operands must be numeric arrays.
Error in @(x)bsxfun(@times,x,res2)
Attach your cell array A.
You wrote: "I have a cell array A which has 1*5 cell, each cell has 12*1 doubles"
Small model of your "A" (let A -- cell array [1x3] each cell double [4x1]):
A = {(1:4)', (5:8)', (10:13)'};
Let B - double array [4x7]:
B = reshape(1:28,4,[]);
Then we have:
>> A = {(1:4)', (5:8)', (10:13)'};
>> B = reshape(1:28,4,[]);
>> out = bsxfun(@times,permute(cell2mat(A),[1,3,2]),B)
out =
ans(:,:,1) =
1 5 9 13 17 21 25
4 12 20 28 36 44 52
9 21 33 45 57 69 81
16 32 48 64 80 96 112
ans(:,:,2) =
5 25 45 65 85 105 125
12 36 60 84 108 132 156
21 49 77 105 133 161 189
32 64 96 128 160 192 224
ans(:,:,3) =
10 50 90 130 170 210 250
22 66 110 154 198 242 286
36 84 132 180 228 276 324
52 104 156 208 260 312 364
>>
Here they are
Oh I see my bad, It has actually 1*5 cell and each cell 1*12 cell and each cell has 1 double. Thanks for the example, I see where it was my mistake.
for your data (MatFiles.mat):
A1 = cellfun(@(x)[x{:}]',A,'un',0);
out = bsxfun(@times,permute(cell2mat(A1),[1,3,2]),B); % out - 3D double array
or
out = cellfun(@(x)bsxfun(@times,x,B),A1,'un',0); % here out - cell array (1 x 5)
ok great, it works. I relay appreciate.

Sign in to comment.

More Answers (0)

Categories

Asked:

on 13 Jul 2016

Commented:

on 13 Jul 2016

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!