Shuffle matrix rows so that common elements are in completely different order than in a said row
Mostrar comentarios más antiguos
Say we have a matrix row 'current_row'
1 2 3
and a matrix A
1 2 5
1 3 6
2 4 3
The task is to re-arrange matrix A so that the common elements with 'current:_row' in each row are in compelely different indices.
One solution would be:
5 1 2
6 3 1
2 3 4
So that
for i=1:size(A,1)
find(current_row == A(i,:))
end
gives always three []'s
Respuesta aceptada
Más respuestas (1)
John D'Errico
el 26 de Abr. de 2019
1 voto
What you are looking for is a variation of derangement - thus a permutation such that no element is in the same location as it started.
A simple solution? Just continue to shuffle each other row until it meets the goal, that no common elements are in the same location as they are in current_row. Stop when it does, and then go on to the next row. WTP?
You can probably improve on that scheme a bit, by finding the elements in common between the two rows. Then first permute them into ANY locations, as long as they are not the same as the current_row. Having done that derangement operation, then permute the other elements into any random permutation.
1 comentario
Pseudoscientist
el 26 de Abr. de 2019
Categorías
Más información sobre Antennas, Microphones, and Sonar Transducers en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!