如何将循环中的当前迭代与前一次迭代进行比较?
例如,我想看看矩阵中的一个元素(它是结构的一部分)是否低于同一个元素,但是来自前一个迭代(显然这些不是相同的值,但是相同的元素,只是不同的迭代)。为了更清楚,我需要调用矩阵元素mystruct(h).field(j,1)
并查看该元素是否低于mystruct(h-1).field(j,1)
。
a=rand(20,1);
field = 'field';
for h=1:20
value = 1.4*rand(20,1);
value1 = zeros(20,1);
mystruct(h) = struct(field,value);
NEWstruct(h) = struct(field,value1);
end
for j=1:20
if mystruct(1).field(j,1)<a(j,1)
NEWstruct(1).field(j,1)=mystruct(1).field(j,1);
else
NEWstruct(1).field(j,1)=a(j,1);
end
end
此后,我必须查看下一次迭代mystruct(2).field(j,1)
是否低于之前的迭代NEWstruct(1).field(j,1)
,如果是,请将其值分配给NEWstruct(2).field(j,1)
。如果不是,那么它应该等于mystruct(1).field(j,1)
答案 0 :(得分:0)
在一般情况下,您可以使用以下数组:
field_data = cat(3,mystruct.field);
greater = diff(field_data, [], 3)>0;
现在greater
是一个3D阵列,由大小为field
和size(mystruct)-1
层的2D数组组成。每个层对应于每次迭代的变化。因此,如果值增加,您可以1
,如果值减少,则0
。field_data(:,:,1) =
0.0358 0.4735 0.6074
0.1759 0.1527 0.1917
0.7218 0.3411 0.7384
field_data(:,:,2) =
0.2428 0.7655 0.0911
0.9174 0.1887 0.5762
0.2691 0.2875 0.6834
field_data(:,:,3) =
0.5466 0.6476 0.9452
0.4257 0.6790 0.2089
0.6444 0.6358 0.7093
greater(:,:,1) =
1 1 0
1 1 1
0 0 0
greater(:,:,2) =
1 0 1
0 1 0
1 1 1
例如,你可能有这样的事情:
min(mystuct(h-1).field(j),mystuct(h).field(j))
使用此数组,您只需要为每个可能的更改检查正确的值。
在您的特定情况下,如果您想要的只是将最小NEWsctruct(h).field(j)
分配给for h=2:length(mystruct)
for j=1:20
NEWstruct(h).field(j) = min(mystruct(h-1).field(j),mystruct(h).field(j));
end
end
,您可以简单地迭代所有值,添加以下代码:
field_data = cat(2,mystruct.field); % Gather the whole data in a matrix
minimum = min(field_data(:,2:end),field_data(:,1:end-1)); % Get the proper values (as a matrix)
NEWstruct(2:end) = cell2struct(num2cell(minimum,1),field,1); % Assign the values to the struct
或使用矢量化形式:
<div class="portoTextDetails">
<p>
text....</a>
</p>
</div>