我正在尝试将n和b变量的输出存储为向量。我尝试过的解决方案在向量中产生了不必要的零值。有什么建议?
x=rand(113,1);
y=rand(113,1);
x=sort(x, 'descend');
v=[x,y];
for i=2:113
m=max(v(1:i-1,2));
if v(i,2) > m == true
n=(v(i-1,2))
b=(v(i-1,1))
end
end
答案 0 :(得分:0)
x=rand(113,1);
y=rand(113,1);
x=sort(x, 'descend');
v=[x,y];
n=[];b=[];
for i=2:113
m=max(v(1:i-1,2));
if v(i,2) > m
n(end+1)=v(i-1,2)
b(end+1)=v(i-1,1)
end
end
答案 1 :(得分:0)
$ImportedCsv | Group-Object -Property Email | ForEach-Object {
$ToAddress = $_.Name
$Body = $_.Group | Select-Object * -Exclude 'Email' | ConvertTo-Html -Head $HtmlFormat -Body $BodyFormat
Send-MailMessage -From $FromAddress -To $ToAddress -Subject $Subject -BodyAsHtml "$Body" -Priority High -SmtpServer $SMTPServer
}
答案 2 :(得分:0)
首先,您不需要true
行上的if
。当您说if v>m
时,它意味着if v is bigger than m
,因此无需拥有== true
。
您可以按如下方式优化代码:
x=rand(113,1);
y=rand(113,1);
x=sort(x, 'descend');
v=[x,y];
N = [];
B = [];
for ii=2:113
if v(ii,2) > max(v(1:ii-1,2))
N = [N v(ii-1,2)];
B = [B v(ii-1,1)];
end
end
但请记住,如果向量很大,您应该考虑预先分配两个向量。 如果在循环开始之前您不知道数组的大小,请预先分配它,然后在必要时在循环完成后将其缩小。
在这种情况下,您可以使用NaN
预分配然后删除它们:
x=rand(113,1);
y=rand(113,1);
x=sort(x, 'descend');
v=[x,y];
N = nan(size(x));
B = N;
for ii=2:113
if v(ii,2) > max(v(1:ii-1,2))
N(ii,1) = v(ii-1,2);
B(ii,1) = v(ii-1,1);
end
end
N = N(~isnan(N));
B = B(~isnan(B));
答案 3 :(得分:0)
请注意使用:
a = [] ;
for i = 1:n
a = [a i] ;
end
当您循环到更高的数字时,上述方法将花费很长时间。另请注意,MATLAB在数组 a 下显示红线。因此,最好的方法是预先分配矩阵。现在,问题是,当我不知道尺寸时,我如何预先分配矩阵/数组。请记住,我们在MATLAB中,它有很多选项。我们很幸运,在这种情况下我们知道一个维度,即你的结果是一个数组,因此其中一个维度是1.我们可以在这种情况下预先分配结果。检查以下代码:
x=rand(113,1);
y=rand(113,1);
x=sort(x, 'descend');
v=[x,y];
count = 0 ;
n_vect = zeros(1,[]);
b_vect = zeros(1,[]);
for i=2:113
m=max(v(1:i-1,2));
if v(i,2) > m == true
n=(v(i-1,2)) ;
b=(v(i-1,1)) ;
count = count+1 ;
n_vect(count) = n ;
b_vect(count) = b;
end
end
现在MATLAB没有显示任何警告,因为我们预先分配了它。
请注意,最好始终使用;避免在屏幕上不必要的打印,这是令人讨厌和耗时的。