【发布时间】:2019-05-26 20:56:34
【问题描述】:
我在一个 Matlab 项目中工作,我有一个正在工作的函数,但我想优化它,减少我代码中的 for 循环数。 我读到了vectorization,我可以使用它,但是如果我必须一次测试每个值,我将如何包含 if 条件语句?
function [y, zf] = MyFunction(x, b, zi)
y = zeros([length(x) 1]);
for n = 1:length(x)
for k=1:length(zi)
if n<k
y(n) = y(n) + b(k)*zi(length(zi)+(n-k)+1);
else
y(n) = y(n) + b(k)*x(n-k+1);
end
end
end
zf = x(length(x)-length(zi)+1:length(x));
我设法进行矢量化,但我不知道如何做条件,我收到警告:
变量“n”可能由非标量运算符设置
function [y, zf] = MyFunction(x, b, zi)
y = zeros([length(x) 1]);
n=1:1:length(x); % use of vectorization
for k=1:length(zi)
if n<k % problem with if
y = y + b(k)*zi(length(zi)+(n-k)+1);
else
y = y + b(k)*x(n-k+1);
end
end
zf = x(length(x)-length(zi)+1:length(x));
【问题讨论】: