How can i position the minimum value in the first cell for each column, without changing the sequence?
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Utsav Vishal
el 20 de Abr. de 2017
Comentada: Utsav Vishal
el 20 de Abr. de 2017
I have a 100 x 1000 array, with the minimum value at the different position for each column. How can I position the minimum value in the first cell for each column, without changing the sequence?
0 comentarios
Respuesta aceptada
Star Strider
el 20 de Abr. de 2017
This should do what you want:
M = randi(9,6,4); % Create Matrix
for k1 = 1:size(M,2)
[~,idx] = min(M(:,k1)); % Index Of Minimum In Column ‘k1’
Mr(:,k1) = circshift(M(:,k1), 1-idx, 1); % Rotate To Put First Minimum In First Row
end
M =
1 6 9 5
6 4 3 3
9 5 7 4
3 9 3 2
1 4 9 4
4 7 3 4
Mr =
1 4 3 2
6 5 7 4
9 9 3 4
3 4 9 5
1 7 3 3
4 6 9 4
Here ‘M’ is the original matrix, ‘Mr’ is the ‘rotated’ matrix. The circshift function will do what you want.
Note that the min (and max) functions only return the index of the first value of the minimum in a vector, if there are duplicates.
5 comentarios
Más respuestas (2)
Roger Stafford
el 20 de Abr. de 2017
[~,I] = min(A,[],1);
for k = 1:size(A,2);
A(:,k) = circshift(A(:,k),1-I(k),1);
end
5 comentarios
Roger Stafford
el 20 de Abr. de 2017
Given the error you received, try this instead:
[~,I] = min(A,[],1);
for k = 1:size(A,2);
A(:,k) = circshift(A(:,k),1-I(k));
end
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!