Find and delete a double value in matrix

4 vues (au cours des 30 derniers jours)
Rihanna Waterson
Rihanna Waterson le 24 Fév 2017
Commenté : Jan le 27 Fév 2017
I have several matrices with Double values. I want to delete(make null) n numbers. For example n=300 and I want to delete 300 values randomly. Here is a part of my code. I'm not sure if it's correct and how to continue it.
totalsize=size(matrixname,1)*size(matrixname,2);
n=totalsize*PER; %number of elements which values should be deleted
r = randi([1 totalsize],1,pen); %find n random elements to be deleted

Réponses (2)

James Tursa
James Tursa le 24 Fév 2017
Use randperm, not randi. The randperm function will ensure that you do not get duplicate indexes to delete, whereas using randi might produce duplicate indexes. Also, I am assuming PER is a percentage number, so you should use round or floor or ceil on the result of totalsize*PER to ensure it is an integer for downstream processing.
  1 commentaire
Rihanna Waterson
Rihanna Waterson le 24 Fév 2017
Modifié(e) : Rihanna Waterson le 24 Fév 2017
Thank you. And how to find and delete value of each nth element in a matrix? I know I cannot use find() because of decimal numbers.

Connectez-vous pour commenter.


Jan
Jan le 24 Fév 2017
Modifié(e) : Jan le 24 Fév 2017
totalsize = numel(matrixname);
n = round(totalsize*PER);
index = randperm(totalsize, n); % n eandom distinct values from 1:totalsize
matrixname(index) = 0;
To delete each n.th element:
matrixname(1:n:totalsize) = 0;
  2 commentaires
Rihanna Waterson
Rihanna Waterson le 24 Fév 2017
Thanks. But they shouldn't be zero...because it will affect image reconstruction. I should delete them so they won't be used in image reconstruction. I've written this part but it seems the last line is not correct.
PER=0.0001;
totalsize=size(y_blk,1)*size(y_blk,2);
pen=floor(totalsize*PER);
r = randperm (totalsize,pen);
for l=0:pen
rem=rem(r,size(y_blk,1)); %row
div=floor(r/size(y_blk,1))+1; %column
y_blk(rem,div)=[];
end
Jan
Jan le 27 Fév 2017
@Rihanna: The term "delete(make null)" was not clear to me.
Please explain "it seems the last line is not correct" with details. I cannot run your code to check, what's going on. Note that deleting elements in a matrix might conflict with the definition of a matrix, that all columns have the same number of rows and vice versa.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by