在Matlab上获取带有循环的代码的最终变量
我有一个带两个在Matlab上获取带有循环的代码的最终变量,matlab,for-loop,size,Matlab,For Loop,Size,我有一个带两个的循环代码。代码工作正常。问题是,最后我想得到一个变量megafinal,其中包含所有年份的结果。原始变量A有3M行,因此它给了我一个错误,因为megafinal的大小随着每次循环迭代而变化,并且matlab停止运行代码。我想这是一个效率低下的问题。是否有人知道一种方法来获得这个最终变量,不管它的大小 y = 1997:2013; for i=1:length(y) A=b(cell2mat(b(:,1))==y(i),:); %Obtain the absolut
的循环代码
。代码工作正常。问题是,最后我想得到一个变量megafinal
,其中包含所有年份的结果。原始变量A
有3M行,因此它给了我一个错误,因为megafinal
的大小随着每次循环迭代而变化,并且matlab停止运行代码。我想这是一个效率低下的问题。是否有人知道一种方法来获得这个最终变量,不管它的大小
y = 1997:2013;
for i=1:length(y)
A=b(cell2mat(b(:,1))==y(i),:);
%Obtain the absolute value of the difference
c= cellfun(@minus,A(:,3),A(:,4));
c=abs(c);
c= num2cell(c);
A(:,end+1) = c;
%Delete rows based on a condition
d = (abs(cell2mat(A(:,8)) - cell2mat(A(:,7))));
[~, ind1] = sort(d);
e= A(ind1(end:-1:1),:);
[~, ind2,~] = unique(strcat(e(:,2),e(:, 6)));
X= e(ind2,:);
(…)
for j = 2:length(X)
if strcmp(X(j,2),X(j-1,2)) == 0
lin2 = j-1;
%Sort
X(lin1:lin2,:) = sortrows(X(lin1:lin2,:),13);
%Rank
[~,~,f]=unique([X{lin1:lin2,13}].');
g=accumarray(f,(1:numel(f))',[],@mean);
X(lin1:lin2,14)=num2cell(g(f));
%Score
out1 = 100 - ((cell2mat(X(lin1:lin2,14))-1) ./ size(X(lin1:lin2,:),1))*100;
X(lin1:lin2,15) = num2cell(out1);
lin1 = j;
end
end
%megafinal(i)=X
end
使
megafinal
成为单元格数组。这将解释每次迭代时X
的大小变化。因此,只需执行以下操作:
megafinal{i} = X;
要访问单元格元素,只需执行megafinal{num}
,其中num
是您想要的任何索引