Clear Filters
Clear Filters

How Can I randomly select 20% of my array elements AND save their indices (row,column) ?

8 views (last 30 days)
I have a matrix A with n points.
A = [230,30,40,40,80;40 40 30 80 230;40 40 40 230 80]; n=numel(A);
How can i now randomly select a percentage of the points (example p=20% of n) ?
The output should be a new matrix with these random elements. AND another array that tells me "which" elements(row, column) were selected.
Any help appreciated :)

Accepted Answer

Jan
Jan on 19 Jul 2017
Edited: Jan on 19 Jul 2017
A = [230,30,40,40,80;40 40 30 80 230;40 40 40 230 80];
n = numel(A);
Index = randperm(numel(A), ceil(numel(A) * 0.20));
[Xp, Yp] = ind2sub(size(A), Index);
Selected = A(Index);
This chooses 20% of the values randomly and replies the values in Selected and the indices in Xp, Yp.
  2 Comments
Omar Shehata
Omar Shehata on 19 Jul 2017
Thank you very much :)
what if I now want to have the "Selected" MATRIX in the same dimension as my data matrix "A". and all data which are not selected could be NaN or 0 then ?

Sign in to comment.

More Answers (1)

ES
ES on 19 Jul 2017
A = [230,30,40,40,80;40 40 30 80 230;40 40 40 230 80];
n=numel(A);
B=reshape(A, 1, n); %1-D array
p = randperm(n);%random permutation of numbers till n
k = p(1:ceil(numel(p)/8));%Very poor algo for 1st to 20% of elements. You can improve here
C=B(p);%Target Matrix

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!