【发布时间】:2016-10-25 16:49:33
【问题描述】:
我有一个矩阵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中没有循环
【问题讨论】:
-
B中的元素数量有变化吗?例如A.*cell2mat(B)是否提供您想要的?
我有一个矩阵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中没有循环
【问题讨论】:
B 中的元素数量有变化吗?例如A.*cell2mat(B) 是否提供您想要的?
按照您的描述,这里有几种乘法:
% inputs
A = [1,2,3];
B = {[1,2,3],[1,2,5],[1,2,6]};
使用for循环:
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 循环。在这种情况下,它可能更快、更容易阅读。
【讨论】: