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

 采纳的回答

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 个评论

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
>>
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.

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Cell Arrays 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by