MATLAB: Comment transférer aléatoirement quelques lignes d’une matrice A vers d’autres matrices de l’ensemble de N matrices

Par exemple, nous avons 5 matrices A, B, C, D, E et nous sélectionnons la meilleure matrice en fonction d’un certain paramètre et supposons qu’il s’agit de A, puis nous transférons quelques lignes de la matrice A vers les lignes correspondantes d’autres matrices (B , C, D et E).
Par exemple
 
A = [0 0 0 1 0 0 0
0 0 1 0 0 0 0
0 0 0 0 0 1 0
0 1 0 0 0 0 0
0 0 0 0 0 0 1]
B = [0 1 0 0 0 0 0
1 0 0 0 0 0 0
0 0 0 1 0 0 0
0 0 0 0 1 0 0
0 0 1 0 0 0 0]
C = [1 0 0 0 0 0 0
0 1 0 0 0 0 0
0 0 1 0 0 0 0
0 0 0 0 0 1 0
0 0 0 1 0 0 0]
D = [0 0 1 0 0 0 0
0 0 0 0 1 0 0
1 0 0 0 0 0 0
0 0 0 1 0 0 0
0 1 0 0 0 0 0]
E = [0 0 0 0 0 1 0
0 0 0 1 0 0 0
0 1 0 0 0 0 0
0 0 1 0 0 0 0
1 0 0 0 0 0 0]
 
Maintenant, nous sélectionnons la matrice A et transférons au hasard quelques lignes (supposons les 2e et 4e lignes) aux lignes correspondantes des autres matrices B, C, D et E et le résultat devrait être comme ceci.
 
A = [0 0 0 1 0 0 0
0 0 1 0 0 0 0
0 0 0 0 0 1 0
0 1 0 0 0 0 0
0 0 0 0 0 0 1]
B = [0 1 0 0 0 0 0
0 0 1 0 0 0 0
0 0 0 1 0 0 0
0 1 0 0 0 0 0
0 0 1 0 0 0 0]
C = [1 0 0 0 0 0 0
0 0 1 0 0 0 0
0 0 1 0 0 0 0
0 1 0 0 0 0 0
0 0 0 1 0 0 0]
D = [0 0 1 0 0 0 0
0 0 1 0 0 0 0
1 0 0 0 0 0 0
0 1 0 0 0 0 0
0 1 0 0 0 0 0]
E = [0 0 0 0 0 1 0
0 0 1 0 0 0 0
0 1 0 0 0 0 0
0 1 0 0 0 0 0
1 0 0 0 0 0 0]
 

Meilleure réponse

  • Vraiment, le plus simple est de concaténer vos matrices en un tableau 3D.
    En supposant que votre ResultMest un tableau de cellules:
     
    allmatrices = cat(3, ResultM{:});
     
    Il est alors trivial de copier les lignes d’une page vers les autres pages:
     

    selectedpage = 1; %1 for A, 2 for B, etc.
    selectedrows = randperm(size(allmatrices, 1), 2); %two random rows
    %copy selected rows of selected page to all pages:
    allmatrices(selectedrows, :, :) = repmat(allmatrices(selectedrows, :, selectedpage), 1, 1, size(allmatrices, 3));