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));

     

  • MATLAB: comment lire dans des cellules spécifiques contenant des noms de fichiers se terminant par «Pressure.mat»

    J’ai une liste de 490 fichiers dans une matrice, je veux seulement lire les fichiers qui se terminent par ‘Pressure.mat’, si cela ne se termine pas par cela, je ne veux pas le lire. Quelle fonction puis-je utiliser pour ce faire? Même la création d’une nouvelle matrice qui ne contient que ces cellules spécifiques contenant les fichiers serait ce dont j’ai besoin.

    Meilleure réponse

  • Vous pouvez exécuter une boucle et utiliser strfind. Recherchez Pressure.mat dans la chaîne, si la sortie n’est pas vide, vous devez lire le fichier.
  • MATLAB: Comment échanger quelques lignes au hasard entre les matrices A et B (la matrice B est choisie au hasard dans un ensemble de N matrices)

    Par exemple, nous avons ‘ResultM’ qui donne 5 matrices A, B, C, D, E et nous devons échanger quelques lignes aléatoires entre la matrice A et toute autre matrice B sélectionnée au hasard parmi ces 5 matrices. Nous sélectionnons d’abord une matrice au hasard parmi 5 matrices, puis nous sélectionnons quelques lignes au hasard et échangeons des lignes entre ces matrices (matrice A et matrice sélectionnées au hasard). Le même processus est suivi pour toutes les matrices de l’ensemble.
    Exemple: opération d’échange de flèche entre la matrice A et la matrice sélectionnée au hasard
    puis entre la matrice B et la matrice sélectionnée au hasard
    puis entre la matrice C et la matrice sélectionnée au hasard
    puis entre la matrice D et la matrice sélectionnée au hasard
    puis entre la matrice E et la matrice sélectionnée au hasard
    Une nouvelle matrice aléatoire est choisie pour chaque opération d’échange de lignes.
    Par exemple, nous avons la matrice A
     
    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]
    And we randomly choose matrix D (say)
    D = [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]
    Then we select a few rows randomly (say 2 and 4) and exchange.
    The resulting matrices are
    A = [0 0 0 1 0 0 0
    1 0 0 0 0 0 0
    0 0 0 0 0 1 0
    0 0 0 0 1 0 0
    0 0 0 0 0 0 1]
    D = [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]
     
    De même, nous effectuons une opération d’échange de lignes pour toutes les matrices de l’ensemble.

    Meilleure réponse

  •  

    A = rand(5,7,5) ; % your A,B,C,D and E matrices in 3D
    A0 = A ;
    [m,n,p] = size(A) ;
    for i = 1:p
    idx = randperm(p,2) ; % selecte two rows randomly
    matrices = randperm(p,1) ; % select one matrix randomly
    A(idx,:,matrices) = A(idx,:,i) ; % replace random rows in selected matrix
    end

     

  • MATLAB: Dans la matrice d’entrée, les deux premiers bruts sont échangés avec une autre matrice qui est 2 * 3 remplacer les deux premiers bruts entiers par celui

     
    entry matrix
    1.00 4.00 4.00
    3.00 0 6.00
    5.00 3.00 1.00
    5.00 0 4.00
    0 3.00 6.00
    2.00 1.00 6.00
     
    une autre matrice C
     
    1 0 9
    4 6 9
     
    maintenant les deux premières lignes de la matrice d’entrée sont supprimées avec la matrice d’entrée c est maintenant vue comme ceci
     
    1 0 9
    4 6 9
    5 3 1
    5 0 4
    0 3 6
    2 1 6
     

    Meilleure réponse

  •  

    em = [1.00 4.00 4.00
    3.00 0 6.00
    5.00 3.00 1.00
    5.00 0 4.00
    0 3.00 6.00
    2.00 1.00 6.00] ;
    c = [1 0 9
    4 6 9] ;
    iwant = em ;
    iwant(1:2,:) = c(1:2,:) ;

     

  • MATLAB: Comment utiliser la fonction If pour choisir seulement quelques valeurs de la matrice

    J’ai 10 points avec les axes x et y qui sont représentés dans la matrice C: C =
     
    11.1902 78.9215
    43.7123 84.8152
    26.2182 55.0542
    89.4285 18.3821
    41.1215 32.8977
    62.8533 101.3337
    26.5649 25.2378
    70.1982 92.5817
    36.2971 63.8342
    75.4079 109.6135
    The first column represents x axis, and second column indicates y axis.
    I need to set conditions like:
    If x positions of any 10 points is less than 5 or more than 60 (5>x>60),
    cancel that point (x,y) from the matrix.
    Actually I tried like this, but something is wrong:
    if length(find(C(:,1)<5| C(:,1)>60))~=0
     
    fin
    À la fin, les résultats devraient être comme ceci: C =
     
    11.1902 78.9215
    43.7123 84.8152
    26.2182 55.0542
    41.1215 32.8977
    26.5649 25.2378
    36.2971 63.8342
     

    Meilleure réponse

  •  

    C = [11.1902 78.9215
    43.7123 84.8152
    26.2182 55.0542
    89.4285 18.3821
    41.1215 32.8977
    62.8533 101.3337
    26.5649 25.2378
    70.1982 92.5817
    36.2971 63.8342
    75.4079 109.6135] ;
    x = C(:,1) ; y = C(:,2) ;
    idx = find(x<5 | x>60) ;
    C(idx,:) = [];
    C =
    11.1902 78.9215
    43.7123 84.8152
    26.2182 55.0542
    41.1215 32.8977
    26.5649 25.2378
    36.2971 63.8342

     

  • MATLAB: Comment puis-je séparer les colonnes en comparant les valeurs de la première ligne

    J’ai une matrice
     
    A= 0 1 0 0 1 1 1 1 1 1
    0 1 0 0 1 1 1 1 1 1
    0 1 0 0 1 0 1 1 1 1
    0 1 0 0 1 1 1 1 1 0
    1 1 0 0 1 1 1 0 1 1
    0 1 0 0 1 1 1 0 1 1
    0 1 0 0 1 1 0 1 1 1
    0 1 0 0 1 1 1 1 0 0
    0 1 0 0 1 1 1 1 1 1
    0 0 0 0 1 1 1 1 1 0
    0 1 0 0 1 1 1 1 1 1
     
    où, par rapport à la première ligne, je veux avoir deux matrices distinctes comme B avec toutes les valeurs qui auront A (1,:) == 0 et C avec toutes les valeurs qui seront A (1,:) == 1
    En d’autres termes, à partir de cet exemple, je veux séparer la 1ère, la 3ème et la 4ème colonne dans une matrice séparée et d’autres dans une autre matrice.

    Meilleure réponse

  •  

    t = A(:,1) == 0;
    B = A(:,t)
    C = A(:,~t)

     

  • MATLAB: Comment puis-je afficher les coordonnées d’un point x dans une marice

    comment je peux afficher les coordonnées d’un point x dans une matrice J’ai un programme qui peut afficher le minimum de chaque ligne mais je dois afficher les ordonnées de l’affichage minimum dans Martice pouvez-vous m’aider s’il vous plaît
     

    d =[ 5 8 9 10 ;3 5 50 40 ;0 11 12 80; 58 50 78 60;20 44 97 30 ;50 220 85 75 ;85 74 123 458;57 69 58 12; 10 0 23 5; 44 78 95 124]
    [m,n] = size(d);
    for i = 1:m;
    mvec =d(i,:);
    mmin = mvec(1);
    for j = 2:length(mvec)
    if mvec(j) < mmin
    mmin = mvec(j);
    end
    end

     

    MATLAB: comment ignorer des valeurs ou définir NaN tout en conservant la même taille de matrice

    J’ai une matrice de 2400 x 2400, ‘alb_short’, avec des valeurs allant de 1-100, mais avec de nombreuses valeurs aberrantes de plus de 100 qui doivent être ignorées afin que je puisse tracer les résultats.
    Comment puis-je ignorer ces grandes valeurs ou les définir sur NaN pour que ma matrice reste à sa taille d’origine 2400 × 2400?
    Je vous remercie.

    Meilleure réponse

  •  

    A(A>100)=nan

     

  • MATLAB: création d’un certain nombre de nouvelles lignes à partir de chaque ligne d’une matrice

    Comment puis-je créer un certain nombre de lignes à partir de chaque ligne? Par exemple
     
    A=[a b c d
     
    Ensuite, je veux créer n nouvelles lignes à partir de la première ligne et m nouvelles lignes à partir des deuxième et troisième lignes.
     
    e f g h
    i j k l]
     
    from [a b c d] => Let n=2 =>
     
    New rows [x y z k
    t y j m]
     

    Meilleure réponse

  •  

    [repmat(A(1,:), n, 1);
    repmat(A(2:end,:), m, 1)]