Filter löschen
Filter löschen

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

8 Ansichten (letzte 30 Tage)
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 :)

Akzeptierte Antwort

Jan
Jan am 19 Jul. 2017
Bearbeitet: Jan am 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 Kommentare
Omar Shehata
Omar Shehata am 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 ?
Jan
Jan am 19 Jul. 2017
@Omar: What did you try so far?
B = nan(size(A));
B(Index) = Selected;

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

ES
ES am 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

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by