我有一个矩阵A=[1,2,3]
和一个单元格B={[1,2,3],[1,2,5],[1,2,6]}
。
我想要一个类似单元格的矩阵元素的乘积
这意味着A * B ={1*[1,2,3],2*[1,2,5],3*[1,2,6]};
在matlab中没有循环
答案 0 :(得分:2)
这里有几种方法可以如你所描述的那样繁殖:
% inputs
A = [1,2,3];
B = {[1,2,3],[1,2,5],[1,2,6]};
使用for-loop:
C1 = cell(size(B));
for i=1:numel(C1)
C1{i} = A(i) * B{i};
end
使用cellfun
:
C2 = cellfun(@(a,b)a*b, num2cell(A), B, 'Uniform',false);
使用bsxfun
:
C3 = bsxfun(@times, A(:), cat(1,B{:}));
C3 = num2cell(C3,2)';
所有结果应相等(输出为单元格数组):
assert(isequal(C1,C2,C3))
如果我选择的话,我会坚持使用for-loop。在这种情况下,它可能更快,更容易阅读。