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

 Respuesta aceptada

Andrei Bobrov
Andrei Bobrov el 13 de Jul. de 2016
Editada: Andrei Bobrov el 13 de Jul. de 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 comentarios

Mori
Mori el 13 de Jul. de 2016
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)
Andrei Bobrov
Andrei Bobrov el 13 de Jul. de 2016
Editada: Andrei Bobrov el 13 de Jul. de 2016
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
>>
Mori
Mori el 13 de Jul. de 2016
Here they are
Mori
Mori el 13 de Jul. de 2016
or both here
Mori
Mori el 13 de Jul. de 2016
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)
Mori
Mori el 13 de Jul. de 2016
ok great, it works. I relay appreciate.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Preguntada:

el 13 de Jul. de 2016

Comentada:

el 13 de Jul. de 2016

Community Treasure Hunt

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

Start Hunting!

Translated by