在Array中插入元素(Matlab)

时间:2017-07-11 11:28:18

标签: arrays matlab insert

我需要在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];

有人可以帮助我吗?

3 个答案:

答案 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))会导致实际错误。