How to rotate rows of a matrix?

11 Ansichten (letzte 30 Tage)
Dominik Mattioli am 15 Feb. 2017
Beantwortet: Guillaume am 15 Feb. 2017
I have a matrix A where each row of A has only one value of 1 and the rest are some other number.
A = [9 8 7 1; 9 1 8 7; 9 8 1 7; 9 1 8 7; 9 8 7 1; 1 9 8 7]
How can I rotate all of the rows individually such that the 1 value is in the first column of each row in the resultant matrix? How about the second column? I'd like to do this without a for-loop because I am working with large matrices.
%%% Result:
% First column.
B = [1 9 8 7; 1 8 7 9; 1 7 9 8; 1 8 7 9; 1 9 8 7; 1 9 8 7];
% Second column.
C = [7 1 9 8; 9 1 8 7; 8 1 7 9; 9 1 8 7; 7 1 9 8; 7 1 9 8];
0 Kommentare-2 ältere Kommentare anzeigen-2 ältere Kommentare ausblenden

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Roger Stafford am 15 Feb. 2017
I think a for-loop is your best bet:
for k = 1:size(A,1)
f = find(A(k,:)==1,1);
A(k,:) = circshift(A(k,:),1-f);
end
0 Kommentare-2 ältere Kommentare anzeigen-2 ältere Kommentare ausblenden

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Image Analyst am 15 Feb. 2017
Try this:
A = [1 0 0 0; 0 1 0 0; 0 0 1 0; 0 1 0 0; 0 0 0 1; 0 0 1 0];
desiredColumn = 1; % or 2 or whatever
output = zeros(size(A)); % Initialize
output(:, desiredColumn) = 1 % Assign desired column to all ones.
1 Kommentar-1 ältere Kommentare anzeigen-1 ältere Kommentare ausblenden
Dominik Mattioli am 15 Feb. 2017
Eek, I edited this just after I posted it, I'm sorry. I forgot to add that the order of each row is important. Do you know how to do that too?

Melden Sie sich an, um zu kommentieren.

Guillaume am 15 Feb. 2017
A version without loop. Not sure it'd be faster than Roger's answer:
destcol = 1; %column where the 1 must be located
[c, r] = find(A' == 1);
A(sub2ind(size(A), repmat(r, 1, size(A, 2)), mod((1:size(A, 2)) + c - 1 - destcol, size(A, 2)) + 1))
0 Kommentare-2 ältere Kommentare anzeigen-2 ältere Kommentare ausblenden

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Operating on Diagonal 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