如何为单元格格式矩阵矢量化for循环

时间:2014-04-15 18:31:17

标签: matlab for-loop

我有一个单元格格式的矩阵,每个元素都是一个包含两个数字的单元格,例如,如果c1是索引为1的单元格,我有c1 =(k1,k2)。我想为每个单元格做一些操作,例如:

(k1-a) + (k2-b)

主要操作是:

[(k1-a1)/(z1-a1) * (k1-a2)/(z1-a2) * ....] * [(k2-b1)/(z2-b1) * (k2-b2)/(z2-k2) * ...] 

但我不想使用for循环,我认为一旦这是一个更快的方式为整个矩阵做 这怎么可能?

1 个答案:

答案 0 :(得分:2)

一种方法 -

num2cell(reshape(sum(bsxfun(@minus,vertcat(C{:}),[a b]),2),size(C))) %%// C is input cell array

编辑1:从我收集到的所有关于您的问题和评论的小部分信息中,我希望这是您所需要的 -

%%// **** INPUTS (Sample values taken here for demo). 
%%// Replace these with your values
AB = [{[1 0]} {[2 7]} {[2 2]} ; {[6 2]} {[7 6]} {[5 4]}]; %%// a-b cell array
c1 = {[2 3]}; %%// c1 cell array
z12 = {[4 3]}; %%// z12 cell array

%%// ***** Processing starts here
%%// Read in data into double matrices
c1mat = cell2mat(c1)
k1 = c1mat(1);
k2 = c1mat(2);

z12mat = cell2mat(z12)
z1 = z12mat(1);
z2 = z12mat(2);

ABmat = cell2mat(AB);
Amat = ABmat(:,1:2:end)
Bmat = ABmat(:,2:2:end)
Amat = Amat(:);
Bmat = Bmat(:);

%%// This is your [(k1-a1)/(z1-a1) * (k1-a2)/(z1-a2) * ....]
v1 = prod((k1-Amat)./(z1-Amat))

%%// This is your [(k2-b1)/(z2-b1) * (k2-b2)/(z2-k2) * ...]
v2 = prod((k2-Bmat)./(z2-Bmat))

%%// Final output
out = v1.*v2