how can I get the max of the values between NaN's in an array
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Joanie
am 10 Jun. 2014
Kommentiert: Joanie
am 10 Jun. 2014
I have an array like this one:
T = [NaN NaN; ...
1 3;
2 4;
5 6;
8 7;
NaN NaN;
NaN NaN;
4 5;
6 7;
NaN NaN;
NaN NaN;
1 2;
2 4;
5 6;
NaN NaN];
Now I'd like to add the columns of the values between the Nan's and get the max values of the sums. So the outcome in this case would be:
max = [15; 13; 11]
I tried this:
NaNloc=isnan(T);
ind=find(NaNloc(:,1));
for i=1:(length(ind)-1)
if ind(i+1)-ind(i) >1
patloc=[ind(i) ind((i+1))];
patarray=patloc(1):1:patloc(2);
for j=patarray(1):patarray(length(patarray))
a=T(j,:);
f=a(1)+a(2);
fsave(j-patloc(1)+1,:)=f;
end
max(fsave)
end
end
but I get the outcome: 15 15 11
0 Kommentare
Akzeptierte Antwort
Azzi Abdelmalek
am 10 Jun. 2014
Bearbeitet: Azzi Abdelmalek
am 10 Jun. 2014
T = [NaN NaN; 1 3; 2 4; 5 6; 8 7; NaN NaN; NaN NaN; 4 5; 6 7; NaN NaN; NaN NaN; 1 2; 2 4; 5 6; NaN NaN;4 5];
h=[1;isnan(T(:,1)) ;1]';
out=arrayfun(@(x,y) max(sum(T(x:y,:),2)),strfind(h,[1 0]),strfind(h,[0 1])-1)
Weitere Antworten (2)
Matt J
am 10 Jun. 2014
Bearbeitet: Matt J
am 10 Jun. 2014
T=sum(T,2);
lims=reshape(find(isnan(T)),2,[]);
n=size(lims,2);
result=nan(1,n);
for i=1:n
result(i)=max(T(lims(1,i)+1:lims(2,i)-1));
end
3 Kommentare
Matt J
am 10 Jun. 2014
I don't fully understand your original code, but here is how I would extract each individual block of T
if ~isnan(T(1))
T=[nan,nan;T];
end
if ~isnan(T(end))
T=[T;nan,nan];
end
nanloc=find(isnan(T(:,1)));
for i=1:length(nanloc)-1
a=nanloc(i);
b=nanloc(i+1);
if b-a==1,
continue;
else
a=a+1;b=b-1;
end
Tblock = T(a:b,:), %current block
end
Andrei Bobrov
am 10 Jun. 2014
l = ~isnan(T(:,1));
k = [l(1);diff(l)] == 1;
ii = cumsum(k);
z = (1:size(T,1))';
out = accumarray(ii(l),z(l),[],@(x)max(sum(T(x,:),2)));
0 Kommentare
Siehe auch
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!