How to Remove Elements in a Matrix Less than a Threshold?

Hi,
I have a 3000 x 3000 matrix and want to remove all elements inside the matrix that are less than a specific value, .5 for example.
How would I go about this?
Here's what I have so far but it doesn't seem to work:
function y = highestValues(a,b)
% a is the matrix
% b is the threshold value
[sortedValues,~] = sort(a,1,'descend');
exclude = sortedValues < b;
sortedValues(exclude) = [];
highestValue = sortedValues;
clearvars n sortedValues;
y = highestValue;
Thank you!

 Réponse acceptée

You can just do this: (removing all entries larger in absolute value than 2)
x = randn(10,10);
indices = find(abs(x)>2);
x(indices) = [];
But then x will be a vector and no longer a matrix of the same size you started with:
You can also do this:
x = randn(10,10);
indices = find(abs(x)>2);
x(indices) = NaN;
This will maintain your matrix.

3 commentaires

Image Analyst
Image Analyst le 26 Sep 2012
Modifié(e) : Image Analyst le 26 Sep 2012
It should be noted that the find() is not necessary.
Do not work ! Matrix is not maintained ...
Ofcourse if you remove the elements, which was what was asked in the question, the matrix will not be mantained. If you just want to replace those values with a zero just do this:
A.*(A>Threshold))

Connectez-vous pour commenter.

Plus de réponses (1)

I have a matrix like this : X =
5.1000 3.5000
4.9000 3.0000
4.7000 3.2000
4.6000 3.1000
5.0000 3.6000
5.4000 3.9000
4.6000 3.4000
5.0000 3.4000
4.4000 2.9000
4.9000 3.1000
I would like to delete an element from the matrix. how can I do that ?

3 commentaires

You can't because the matrix would no longer be rectangular if you deleted just one element. You need to delete a whole row or whole column.
X(rowToDelete,:) = []; X(:, columnToDelete) = [];
well, if I want to delete an entire row from the matrix X? How can I do that ?
%lets assume we have some time
%and measurement data and want
%to remove any data that is out of range
%create some sample matrix
c= [1:6;100:105]
%create a mask matrix with all 1 where criteria matches
mask = c>102 & c<105
%use the second row of the mask to remove the data columns
c(:,mask(2,:))
%should work the same when transposing it

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by