我需要在if
条件正确后在我的数组中插入0。
这是我的尝试:
for i=1:length(HPred)
if HPred(i) ~= HPired(i)
if HPred(i) - HPired(i) > 5
HPred(i) = [HPred(i) 0 ]; % Here is the problem
i=i+1;
elseif HPred(i) - HPired(i) < -5
HPired(i) = [HPired(i) 0]; %also
i=i+1;
end
end
end
错误代码是:
在赋值A(:) = B中,A和B中的元素数必须相同。
Einlesen中的错误(第167行)HPired(i)= [HPired(i)0];
有人可以帮助我吗?
答案 0 :(得分:1)
您可以这样插入:
HPred = [HPred(1:i) 0 HPred(i+1:end)];
当你编写和得到的错误体时,它在语法上没有意义。
您也可以使用cat
定义内联函数(以连接矩阵),如上所述here:
insert = @(a, x, n)cat(2, x(1:n), a, x(n+1:end));
insert(3, [1,2,4,5], 2)
ans = 1 2 3 4 5
你可以将它用于你的情况:
HPred = insert(0, HPred, i);
答案 1 :(得分:1)
如果你想按条件插入零,这里是一个完全矢量化的版本。输入向量可以不包含任何NaN,并且必须是行向量(格式1xN)。 HPred(i) ~= HPired(i)
条件是多余的,因为后面的条件只有在这个条件为真时才能为真。
% some random data
HPired = randi(20,1,10);
HPred = randi(20,1,10);
% temp variable for the indexes
temp = nan(size(HPred));
% indexes that fulfil condition = 0
temp(HPred - HPired>5) = 0;
% concatenate vertically
temp=[HPred; temp];
% same as before for other variable
temp2 = nan(size(HPired));
temp2(HPred - HPired<-5) = 0;
temp2=[HPired; temp2];
% merge temp rows which are not NaN in a zig-zag pattern.
HPred=temp(~isnan(temp)).';
HPired=temp2(~isnan(temp2)).';
答案 2 :(得分:0)
看起来你的整个循环可以用以下代替,使用MATLAB的矢量化:
HPired = rand(100, 1); % Your data
HPred = ones(size(HPired)); % array of ones of same size, or other data same size
% This replaces your ENTIRE loop and both if statements!
HPred(HPred ~= HPired & abs(HPred - HPired) > 5) = 0;
尝试将两个元素([HPired(i) 0]
)分配给数组的一个元素(HPired(i)
)会导致实际错误。