Shuffling non-zero elements of each column in a matrix
조회 수: 1 (최근 30일)
이전 댓글 표시
I want to shuffle non-zero elements of each column in a matrix but keep the zero elements at the same place. Like I have this:
A =
[10 0 30 40 50 60
11 0 31 41 0 61
0 22 32 42 0 62
13 23 0 43 0 63
0 24 34 44 54 64
15 0 35 0 0 65
16 26 36 46 56 66]
And I want this:
B =
[13 0 32 44 54 64
11 0 35 42 0 63
0 24 36 40 0 61
16 23 0 43 0 62
0 22 31 41 56 60
10 0 30 0 0 66
15 26 34 46 50 65]
So herein I have the zeros at the exact same place (i.e. ~A = ~B) and the non-zero elements are shuffled. Obviously shuffling the columns using 'randperm' does not work as it does not allow me to keep zeroes at the same place!
댓글 수: 0
채택된 답변
James Tursa
2018년 4월 13일
편집: James Tursa
2018년 4월 13일
You're probably going to need a loop for this since the number of non-zero elements in a column is not constant across all the columns. For each column, use randperm on the non-zero elements. E.g., the process for one column:
A = your matrix
Ac = A(:,1); % a column
z = Ac ~= 0; % the non-zero element logical indexes
Az = Ac(z); % the non-zero elements
A(z,1) = Az(randperm(numel(Az))); % the shuffled elements replaced
Or, if you want a new matrix B as a result then copy A into B first and operate on B.
댓글 수: 3
James Tursa
2018년 4월 13일
Put everything in the loop, not just the last two lines. Change the 1 to your loop index variable.
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Get Started with MATLAB에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!