Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    2

    [MATLAB] Selezione righe di una matrice

    Salve a tutti, ho un problema che non riesco a risolvere, mi dareste una mano?
    Ho una matrice A , da questa dovrei creare una matrice B contenente solo le righe della matrice madre che rispecchiano una certa condizione cioè che abbiano l'ultimo elemento compreso tra un certo numero ed un altro (ad esempio tra 10 e 20). Sono due giorni che faccio cicli For, If e While ma non riesco ad ottenere la matrice B più piccola, infatti ciò che ottengo è sempre una matrice delle stesse dimensioni di A solo con 0 al posto delle righe scartate.
    Un grazie a tutti coloro che mi daranno una mano.
    Saluti
    Antonio

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Quando lavori in MATLAB puoi pensare di ricorrere o al parallelismo sui dati, che è una caratteristica molto potente del MATLAB che ti consente di fare operazioni anche abbastanza complesse in una o due righe di codice, oppure puoi ricorrere all'approccio iterativo solito (for, while ecc...). Io ti consiglio la prima strada, anche perché significa sfruttare una caratteristica che altri linguaggi non ti forniscono.

    Il tuo esercizio si può risolvere così: se A è la matrice di partenza, supponiamo creata così

    codice:
    >> A = fix( 100 * rand (7, 6) )
    
    A =
    
        65    82    76    75    95    69
        17    69    79    27    34    89
        70    31    18    67    58    95
         3    95    48    65    22    54
        27     3    44    16    75    13
         4    43    64    11    25    14
         9    38    70    49    50    25
    (ovviamente la puoi creare delle dimensioni che vuoi tu), puoi ottenere la matrice B semplicemente con questa riga:

    codice:
    B = A( A(:, end) >= 10 & A(:, end) <= 20, : )
    il cui output è

    codice:
    B =
    
        27     3    44    16    75    13
         4    43    64    11    25    14
    oppure, per ricorrere all'approccio iterativo classico, puoi fare tutto con questo script:

    codice:
    B = [];
    for i = 1:size(A, 1)
        if A(i, end) <= 20 && A(i, end) >= 10
            B = [ B; A(i, :) ];
        end
    end
    disp(B);
    che dovrebbe essere meno ermetico...
    every day above ground is a good one

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    2
    Grande!!
    grazie mille, ho finalmente capito il mio errore, dato dall'inesperienza. Accetto volentieri anche il tuo consiglio di usare il primo metodo!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.