How to compact an array with repeated data and NaNs?
3 views (last 30 days)
Show older comments
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 Comments
Konstantinos Sofos
on 25 Mar 2015
Edited: Konstantinos Sofos
on 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....
Accepted Answer
James Tursa
on 25 Mar 2015
Edited: James Tursa
on 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);
More Answers (0)
See Also
Categories
Find more on Creating and Concatenating Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!