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

11 vues (au cours des 30 derniers jours)
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 :)

Réponse acceptée

Jan
Jan le 19 Juil 2017
Modifié(e) : Jan le 19 Juil 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 commentaires
Omar Shehata
Omar Shehata le 19 Juil 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 ?
Jan
Jan le 19 Juil 2017
@Omar: What did you try so far?
B = nan(size(A));
B(Index) = Selected;

Connectez-vous pour commenter.

Plus de réponses (1)

ES
ES le 19 Juil 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

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by