# how to use sum and isnan across two different matrices

3 views (last 30 days)
Fede C 2018 London on 20 Jul 2021
Hi all,
How does one use sum and isnan to compare values in rows located in different matrices?
sum(isnan(data(i,2:end)),matfor2(:,1))>=1
doesn't work- data and matfor are the two matrices. I'm simply trying to add, for each iteration, the row in the columns of matrix data (from the 2nd onwards), with the 1st (non-zero) column of matfor2. The point of that line is to truncate the two columns at the point where both have non NaN values.
if I did this:
%if sum(isnan(data(i,:)))>=1
I wouldn't get an error message. ALL the data would be truncated to where the series with the most amount of NaNs starts getting values. But I don't want that. I want the loop to extract the largest possible span of data for combinations of two series.
I'm doing this in a loop and what I will be doing in the loop (won't present it here for clarity) requires stuff done to combinations of two columns, one -the 1st column in data- that doesn't change, and the other that changes at each iteration. The issue is that each time series may have different starts and ends in terms of data availability. So the span of the data, for each combination of column 1 and column ii, varies. For that reason, I have to adjust the length of the data every time. The way I've approached this is as follows:
[n,l] = size(data); %find length of data (raw, including NaN rows)
B = cell(1,nCols-1); %preallocate a cell to store matrices of different row length
matfor2=zeros(n,2);
matfor2(:,1) = data(:,1);
for ii= 2:nCols
%loop to pair match-wise rows without adjacent NaNs (two columns at a
%time)
for i=1:n;
if sum(isnan(data(i,2:end)),matfor2(:,1))>=1
i=i+1;
else
break
end
end
B{ii}=matfor2(i:n,ii)
end
Fede C 2018 London on 21 Jul 2021
thank you all for your comments. I finally worked it out.