我有一个单元格格式的矩阵,每个元素都是一个包含两个数字的单元格,例如,如果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循环,我认为一旦这是一个更快的方式为整个矩阵做 这怎么可能?
答案 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