How to compact an array with repeated data and NaNs?

7 visualizzazioni (ultimi 30 giorni)
Hi!
I have two vectors with measurement set points and an array with measurement values. The vectors and array contain repeated values and the array also contains NaNs. I would like to remove the repeated data and for the measurement set points where there are both a NaN and a value, I would like the value to remain.
For example, if the two vectors are called x and y and the array is called z.
x = [0 0.5 0.5 1 2]
y = [0 1 2 2 ]
z = [1 NaN 2 5 10; 7 3 3 NaN 2; 8 4 4 NaN NaN; 8 NaN 4 8 NaN]
I would like this to become
x = [0 0.5 1 2]
y = [0 1 2]
z = [1 2 5 10; 7 3 NaN 2; 8 4 8 NaN]
How do I do this in an easy way (I have quite a large array with data…)?
Thanks!
  3 Commenti
Konstantinos Sofos
Konstantinos Sofos il 25 Mar 2015
Modificato: Konstantinos Sofos il 25 Mar 2015
And what will happen in the case that all the values of a row are NaN or the dimensions are not consistent? In your example with Z matrix the output of the last row has 2 times the 8....
Elin
Elin il 25 Mar 2015
Modificato: Elin il 26 Mar 2015
James: That's exactly what I want to do. And, yes, you can assume that x any y are sorted.
Konstantinos: I have no measurement data where all elements in either a row or column is NaN and the dimensions are consistent, so that is not a problem. The reason the Z matrix has the value 8 two times in the last row is because both measurement set points (x = 0, y = 2) and (x = 1, y = 2) give the measurement value z = 8.

Accedi per commentare.

Risposta accettata

James Tursa
James Tursa il 25 Mar 2015
Modificato: James Tursa il 25 Mar 2015
Brute force using loops (if there are different non-NaN values available for a particular spot, picks the max of them):
[m,n] = size(z);
for k=1:n-1
if( x(k) == x(k+1) )
z(:,k) = max(z(:,k:k+1),[],2);
end
end
for k=1:m-1
if( y(k) == y(k+1) )
z(k,:) = max(z(k:k+1,:),[],1);
end
end
[x,iax,~] = unique(x);
[y,iay,~] = unique(y);
z = z(iay,iax);

Più risposte (0)

Categorie

Scopri di più su Tables in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by