Borrar filtros
Borrar filtros

Find and delete a double value in matrix

1 visualización (últimos 30 días)
Rihanna Waterson
Rihanna Waterson el 24 de Feb. de 2017
Comentada: Jan el 27 de Feb. de 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

Respuestas (2)

James Tursa
James Tursa el 24 de Feb. de 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 comentario
Rihanna Waterson
Rihanna Waterson el 24 de Feb. de 2017
Editada: Rihanna Waterson el 24 de Feb. de 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.

Iniciar sesión para comentar.


Jan
Jan el 24 de Feb. de 2017
Editada: Jan el 24 de Feb. de 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 comentarios
Rihanna Waterson
Rihanna Waterson el 24 de Feb. de 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 el 27 de Feb. de 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.

Iniciar sesión para comentar.

Etiquetas

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by