help-octave
[Top][All Lists]

## Re: Filling the gaps in data arrays

 From: Mat086 Subject: Re: Filling the gaps in data arrays Date: Thu, 26 Jul 2018 09:47:23 -0500 (CDT)

```Przemek Klosowski-7 wrote
> On 07/12/2018 04:36 AM, Mat086 wrote:
>> dx = x(2)-x(1);
>> Y = zeros(1,length([min(x):dx:max(x)]));
>> X = [min(x):dx:max(x)];
>> for k=1:length(x)
>>    indx = find(X==x(k));
>>    Y(k) = y(index);
>> endfor
>> plot(x,y,'b-'); hold on; plot(X,Y,'-o');
>
> you meanĀ  Y(k) = y(indx); , right?
>
> And no, it won't work in Matlab either because you are doing exact
> floating point comparisons on calculated values, so any roundoff will
> trip you up---check for yourself, X==X(3) returns matches, but X==x(3)
> probably doesn't.
>
> You said that "In order to analyze such kind of data with another
> software I need to create X and Y vectors without holes". What is
> exactly the assumption there? Is the original dataset sampled on a
> regular grid, and the non-zero values are dropped?
>
> It seems to me that the best solution for you would be to interpolate
> your data onto a regular grid, perhaps like this:
>
> dx=x(2)-x(1);
>
> plot(x,y,'x',X=min(x):dx:max(x),interp1(x,y,X))

Hi Przemek,
I don't need to interpolate the data, actually the best thing would be to
have NaN where the y-data doesn't match the X vector.
this script is doing what I needed to do:

dx = x(2)-x(1);
Y = zeros(1,length([min(x):dx:max(x)]));
X = [min(x):dx:max(x)];
st=1;
for k=1:length(X)
if isempty(y(x==X(k)))
Y(k) = 0;
else
Y(k) = y(st);
st=st+1;
end
end

thanks again,
Mat

--
Sent from: http://octave.1599824.n4.nabble.com/Octave-General-f1599825.html

```