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

     

  • MATLAB: * début * comment puis-je trouver la valeur de la matrice de lignes et vérifier la valeur ligne à colonne

    je veux vérifier la valeur dans chaque ligne ex si je vérifie que row1 a la valeur dans column4 alors vérifiez row4 aidez-moi pls !! je ne sais pas comment coder la boucle désolé mon anglais est nul Ans = 1 4 2 5 3 1

    Meilleure réponse

  •  

    d = [ 0 0 0 1 0 ; 0 0 0 0 1 ;1 0 0 0 0 ; 0 1 0 0 0 ; 0 0 1 0 0] ;
    idx = zeros(size(d,1),1) ;
    for i = 1:size(d,1)
    idx(i) = find(d(i,:)==1) ;
    end
    idx

     

  • MATLAB: Comment supprimer cette ligne de la matrice dont la somme des éléments de plus de 5

    J’ai une matrice:
    C =[
     
    1 0 0 0 0 6
    1 0 0 0 5 6
    1 0 0 4 0 6
    1 0 0 4 5 6
    1 0 3 0 0 6
    1 0 3 0 5 6
    1 0 3 4 0 6
    1 0 3 4 5 6
    1 2 0 0 0 6
    1 2 0 0 5 6
    1 2 0 4 0 6
    1 2 0 4 5 6
    1 2 3 0 0 6
    1 2 3 0 5 6
    1 2 3 4 0 6
    1 2 3 4 5 6];
     
    Je dois supprimer cette ligne, où le nombre d’éléments est supérieur à 5.
    Par exemple, la dernière ligne de la matrice c a 6 éléments, le code doit donc supprimer la dernière ligne de la matrice C.
    Je pourrais écrire le code, mais c’est juste pour une ligne.
    Je dois l’adapter à toutes les lignes. J’ai essayé, mais je n’ai pas pu.
    Quelqu’un pourrait-il m’aider?
    Mon code:
    C =[
     
    1 0 0 0 0 6
    1 0 0 0 5 6
    1 0 0 4 0 6
    1 0 0 4 5 6
    1 0 3 0 0 6
    1 0 3 0 5 6
    1 0 3 4 0 6
    1 0 3 4 5 6
    1 2 0 0 0 6
    1 2 0 0 5 6
    1 2 0 4 0 6
    1 2 0 4 5 6
    1 2 3 0 0 6
    1 2 3 0 5 6
    1 2 3 4 0 6
    1 2 3 4 5 6];
    C~=0,2;
    E=size(C,2);
    if sum(C(16,1:E))>5 %<-------this just checking row-16
    C(16,:)=[];<---------------and removing row 16
    end
     
    Ici, dans mon code, j’ai écrit le nombre de lignes individuelles manuellement, mais en fait, le bon code devrait trouver automatiquement toutes les lignes.

    Meilleure réponse

  •  

    removeIdx = sum(C>0,2)>5;
    C(removeIdx,:) = [];

     

  • MATLAB: J’ai une erreur à la 22e ligne numérique. puis-je avoir besoin de compter les lignes de 1,2,3,… 22 pour le découvrir

    ferme tout; % Fermez tous les chiffres (sauf ceux de imtool.) Imtool ferme tout; % Fermez toutes les figures imtool. clair; % Efface toutes les variables existantes. espace de travail; % Assurez-vous que le panneau de l’espace de travail s’affiche. format longg; format compact; fontSize = 20; % Vérifiez que l’utilisateur a installé la boîte à outils de traitement d’images. hasIPT = licence (‘test’, ‘image_toolbox’); si ~ hasIPT% L’utilisateur n’a pas installé la boîte à outils. message = sprintf (‘Désolé, mais vous ne semblez pas avoir la boîte à outils de traitement d’image. \ nVoulez-vous quand même essayer de continuer?’); répondre = questdlg (message, ‘Boîte à outils manquante’, ‘Oui’, ‘Non’, ‘Oui’); si strcmpi (réponse, ‘Non’)% L’utilisateur a dit Non, alors quittez. revenir; end end% Lire dans une image de démonstration couleur MATLAB standard. folder = fullfile (matlabroot, ‘E: \ 4-1 \ implementation \ my_matlab’); baseFileName = ‘rec.jpg’; % Obtenez le nom de fichier complet, avec le chemin ajouté. fullFileName = fullfile (dossier, baseFileName); if ~ exist (fullFileName, ‘file’)% Ne l’y a pas trouvé. Vérifiez le chemin de recherche pour cela. fullFileName = baseFileName; % Pas de chemin cette fois. if ~ exist (fullFileName, ‘file’)% Toujours pas trouvé. Alerter l’utilisateur. errorMessage = sprintf (‘Erreur:% s n’existe pas.’, fullFileName); uiwait (warndlg (errorMessage)); revenir; end end rgbImage = imread (fullFileName); % Obtenez les dimensions de l’image. numberOfColorBands doit être = 3. [lignes colonnes numberOfColorBands] = taille (rgbImage); % Affichez l’image couleur d’origine. sous-intrigue (2, 2, 1); imshow (rgbImage, []); axe sur; title (‘Image couleur originale’, ‘FontSize’, fontSize); % Agrandir la figure en plein écran. set (gcf, ‘unités’, ‘normalisé’, ‘position extérieure’, [0 0 1 1]); smallSubImage = imcrop (rgbImage, [192 82 60 52]); sous-intrigue (2, 2, 2); imshow (smallSubImage, []); axe sur; title (‘Image modèle à rechercher’, ‘FontSize’, fontSize); % Recherchez une correspondance sur le canal rouge. correlationOutput = normxcorr2 (smallSubImage (:,:, 1), rgbImage (:,:, 1)); sous-intrigue (2, 2, 3); imshow (correlationOutput, []); title (‘Sortie de corrélation’, ‘FontSize’, fontSize); [maxCorrValue, maxIndex] = max (abs (correlationOutput (:))); [ypeak, xpeak] = ind2sub (taille (correlationOutput), maxIndex (1)); corr_offset = [(xpeak-size (smallSubImage, 2)) (ypeak-size (smallSubImage, 1))]; sous-intrigue (2, 2, 4); imshow (rgbImage); attendez; rectangle (‘position’, [corr_offset (1) corr_offset (2) 50 50],… ‘edgecolor’, ‘g’, ‘linewidth’, 2); title (‘Image modèle trouvée dans l’image originale’, ‘FontSize’, fontSize);
    ce code a une erreur dans la 22ème ligne numérique.

    Meilleure réponse

  • Vous n’avez pas besoin de compter les lignes. Si votre fichier est ouvert dans l’éditeur MATLAB, vous devriez voir le nombre de lignes à l’extrême gauche de votre code. MATLAB affichera la ligne exacte où se trouve votre erreur.
  • MATLAB: déterminer la plus grande longueur le long de la largeur de la pièce

    J’ai une image binaire
    ce que je veux faire c’est
    1. Calculez la somme des pixels noirs le long de chaque ligne individuelle
    2. Ensuite, comparez les sommes individuelles pour obtenir la valeur la plus élevée (ce serait ma réponse).
    ou en d’autres termes
    Déterminez la plus grande longueur le long de la largeur de la pièce.
    j’ai encore une question
    >>>>I want to count the number of black pixels in each individual row and then compare that result to get ‘which row has highest number of black pixels’.

    Meilleure réponse

  •  

    % 1. Calculate the sum of black pixels along each and every individual row
    verticalProfile = sum(binaryImage, 2);
    % 2. Then compare the individual sums to get the largest value
    % (which would be my answer).
    [maxWidth, rowAtMaxWidth] = max(verticalProfile);

     

  • MATLAB: Problème de dispersion et de ligne

    Bonjour
    j’ai un petit problème avec ces deux fonctions: scatter et line
    Voici un code simple que j’écris:
     
    x=[16.3,7.3,3.3,13.3,2.3,6.3,12.3,16.3,5.3,12.3,7.3,19.3];
    y=[6.7,17.7,7.7,18.7,6.7,13.7,4.7,17.7,17.7,9.7,9.7,16.7];
    figure(1)
    scatter(x,y,'o')
    grid
     
    Ce sont quatre choses que je dois découvrir:
    1. je ne peux pas savoir comment connecter un des points aléatoires de ces données?
    EXEMPLE: j’ai besoin d’une ligne entre les 1ères données (x = 16,3, y = 6,7) et (aléatoirement hmmm) la 8ème date (x = 12,3, y = 9,7), puis je veux connecter les 8ème et 6ème points de données et etc….
    2. Comment faire un plus grand cercle autour du symbole « o » avec un rayon que je veux?
    3. Comment puis-je mesurer la ligne entre les 1ères données et les 8èmes données?
    EXEMPLE: je peux le faire manuellement avec le théorème de Pythagore mais j’ai besoin de trouver une fonction pour le faire et un moyen d’écrire au-dessus de la ligne la longueur.
    4. Comment puis-je écrire un texte aléatoire au-dessus de tout point de données?
    EXEMPLE: au-dessus du point 1 (1ère donnée x = 16,3, y = 6,7) je veux écrire un Village One (par exemple)!
    THANKS YOU ALL ! WISH YOU BEST !

    Meilleure réponse

  • Ce code illustre tout ce que vous avez demandé.
     
    % Fix the random number seed, for reproducibility
    rng default
    % Data
    x=[16.3,7.3,3.3,13.3,2.3,6.3,12.3,16.3,5.3,12.3,7.3,19.3];
    y=[6.7,17.7,7.7,18.7,6.7,13.7,4.7,17.7,17.7,9.7,9.7,16.7];
    % Choose random point to connect to point 1.
    rn = randi(8);
    % Distance to that point
    d = pdist([x(1) y(1); ...
    x(rn) y(rn)]);
    figure(1)
    % Scatter plot (with larger marker)
    scatter(x,y,'o','SizeData',500);
    % Connect point 1 to the randomly selected one
    line([x(1) x(rn)],[y(1) y(rn)]);
    % Write the distance
    text(15,5,sprintf('d = %7.3f',d))
    % Add the grid
    grid
     
    La seule chose que j’ai faite « manuellement » a été de coder en dur les valeurs où le texte apparaît, de sorte qu’il soit près de la ligne dessinée. Au lieu de cela, on voudrait calculer la position de ce texte via les emplacements des deux points et le placer près du point à mi-chemin.
    Notez également que j’ai utilisé la fonction sprintf pour convertir une valeur numérique en texte, avant de l’écrire. Si vous avez juste un texte connu, vous pouvez simplement le faire
     

    text(x,y,'Known text')

     

  • MATLAB: Comment placer un nombre dans une position aléatoire dans une matrice de zéros

    J’ai une matrice « m » de zéros (6,7) et je voudrais savoir comment placer une variable égale à 1 dans un endroit aléatoire de la matrice. Par exemple, le « 1 » pourrait être placé au hasard dans m (1,2) ou m (5,4), etc. Comment pourrais-je coder ceci pour choisir une ligne et une colonne aléatoires?
    Merci de votre aide!

    Meilleure réponse

  • j’utiliserais indexation linéaire, en profitant de la façon dont les matrices sont stockées dans MATLAB, pour utiliser un numéro pour définir à la fois la ligne et la colonne:
     

    M = zeros(6,7);
    M(randi(numel(M))) = 1
    M =
    0 0 0 0 0 0 0
    0 0 0 0 0 0 0
    0 0 0 0 1 0 0
    0 0 0 0 0 0 0
    0 0 0 0 0 0 0
    0 0 0 0 0 0 0

     

  • MATLAB: comment prendre la moyenne des lignes de valeur particulière

    J’ai un fichier Excel avec trois colonnes (Année, Mois, Temp). Je voulais trouver la moyenne mensuelle des valeurs de Temp de 1997 à 2019, soit Jan-97, Feb-97 et ainsi de suite …
    Maintenant, la table (fichier atteint) a de nombreuses valeurs pour le mois 1, le mois 2, etc. C’est parce que j’ai extrait des valeurs de différents points de la grille et est donc un peu désordonné. Cela ressemble à ceci:
    J’ai utilisé la fonction sortrows pour commander la table. Cependant, je ne sais pas comment continuer. Mon objectif principal est de trier les données par mois (janvier-1997, février-1997… décembre-2019) puis de calculer la moyenne mensuelle des valeurs de Temp de janvier-1997 à décembre-2019. Dans l’attente de votre aide

    Meilleure réponse

  • Triez vos données et utilisezpourboucle
    code schématique (non testé)
     

    s = 0; % sum of group data
    k = 1; % index of group start
    for i = 1:n-1
    s = s + a(i);
    if a(i) ~= a(i+1)
    a1(k:i) = s/(i-k+1); % write mean inside a1
    s = 0; % zeros sum
    k = i; % new group start
    end
    end

     

  • MATLAB: Comment ajouter une ligne à la dispersion

    Bonjour tous le monde,
    J’ai un problème pour trouver un code qui trace la ligne sur mon nuage de points. J’ai téléchargé des photos de scatter et la ligne d’exemple que j’ai dessinée manuellement.
    Si quelqu’un peut aider, je serais heureux.
    Je vous remercie

    Meilleure réponse

  • Les données que vous avez partagées sont distribuées verticalement, j’ai donc estimé une ligne verticale à l’aide de lsqcurvefit. Vous pouvez utiliser une méthode similaire si vous connaissez une équation approximative qui correspond à votre modèle.
     

    load('mathwork.mat');
    x = @(p, y) p(1)*y+p(2);
    p = lsqcurvefit(x, rand(1,2), data.Load, data.Distance);
    scatter(data.Distance, data.Load)
    hold on;
    plot(x(p, data.Load), data.Load, 'LineWidth', 2);

     

  • MATLAB: Question sur la façon de positionner des points sur une ligne

    J’ai le suivant pour diviser une ligne en segments égauxref
     
    xy1 = [141.64 399.53];
    xy2 = [213.32 250.96];
    t = linspace(0,1,11)';
    xy = (1-t)*xy1 + t*xy2;
    plot(xy(:,1),xy(:,2),'b-o')
    Output:
    xy =
    141.6400 399.5300
    148.8080 384.6730
    155.9760 369.8160
    163.1440 354.9590
    170.3120 340.1020
    177.4800 325.2450
    184.6480 310.3880
    191.8160 295.5310
    198.9840 280.6740
    206.1520 265.8170
    213.3200 250.9600
     
    Je voudrais faire ce qui suit pour positionner de nouveaux points le long de la ligne entre les points xy1 et xy2.
     
    xy del
    141.6400 399.5300 0
    148.8080 384.6730 1
    155.9760 369.8160 2
    163.1440 354.9590 0
    170.3120 340.1020 0
    177.4800 325.2450 1
    184.6480 310.3880 0
    191.8160 295.5310 0
    198.9840 280.6740 0
    206.1520 265.8170 1.5
    213.3200 250.9600 0
     
    lorsque shift est 0, aucun point ne doit être ajouté au voisinage du correspondant (x, y).
    Pour toute valeur non nulle, 2 points (un à droite et un à gauche) doivent être ajoutés.
    Par exemple si xy = (10,0)
    del = 2 signifierait que 2 points (8,0) et (12,0) doivent être générés dans le code pour ajouter les nouveaux points en ligne entre les points xy1 et xy2.
    del = 1 signifierait que 2 points (9,0) et (11,0) doivent être générés dans le code pour ajouter les nouveaux points en ligne entre les points xy1 et xy2.
    Toutes les suggestions sur la façon de procéder seront d’une grande aide!

    Meilleure réponse

  • En supposantdelest un vecteur colonne de la même taille quetet est le changement souhaité dans x, essayez ceci
     
    xy1 = [141.64 399.53];
    xy2 = [213.32 250.96];
    t = linspace(0,1,11)';
    % new stuff
    del = [0 1 2 0 0 1 0 0 0 1.5 0]';
    m = (xy1(2)-xy2(2))/(xy1(1)-xy2(1));
    xOld = (1-t)*xy1(1) + t*xy2(1);
    ind = del~=0;
    x = unique(sort([xOld; xOld(ind)+del(ind); xOld(ind)-del(ind)]));
    y = m*(x-xy1(1))+xy1(2);
    plot(x,y,'b-o')
     
    Sidelest la distance souhaitée (norme 2) entre le point d’origine et l’un des nouveaux points, essayez ceci
     

    xy1 = [141.64 399.53];
    xy2 = [213.32 250.96];
    t = linspace(0,1,11)';
    xyOld = (1-t)*xy1 + t*xy2;
    del = [0 1 2 0 0 1 0 0 0 1.5 0]';
    m = (xy1(2)-xy2(2))/(xy1(1)-xy2(1));
    theta = atan(m);
    ind = del~=0;
    xy = unique( [xyOld; ...
    xyOld(ind,:) + [del(ind)*cos(theta),del(ind)*sin(theta)]; ...
    xyOld(ind,:) - [del(ind)*cos(theta),del(ind)*sin(theta)] ], 'rows' );
    plot(xy(:,1),xy(:,2),'b-o')