Find and delete a double value in matrix
8 次查看(过去 30 天)
显示 更早的评论
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
0 个评论
回答(2 个)
James Tursa
2017-2-24
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.
Jan
2017-2-24
编辑:Jan
2017-2-24
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 个评论
Jan
2017-2-27
@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.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!