Mkdir e saveas

di Anonimizzato26907 il
6 risposte
Ciao a tutti, avrei un problema.
Vorrei creare un codice che, per ogni singola run, mi crea una cartella "numerata" (es. prova1,prova2, ecc) al cui interno mi viene salvato un plot;
mi spiego meglio:
simulazione 1 crea prova1 e mi salva dentro il plot
simulazione 2 crea prova2 e mi salva dentro il plot
...

Sarebbe l'ideale non dover usare for in quanto il tutto va poi inserito in un codice abbastanza pesante.

Per adesso sono riuscito a fare la parte in cui mi crea le varie cartelle, ma usando poi saveas per salvare il plot ci sono dei problemi in quanto ad ogni cartella non corrisponde un plot.

Grazie in anticipo per qualsiasi aiuto.

PS il codice di prova è il seguente:

foldername = fullfile(pwd, sprintf('prova%02', k));
if exist(foldername, 'dir')

mkdir("prova"+k);

end
k = k+1;

figure
plot(rand(10,1))
picturename = fullfile(foldername, '1.jpg');
saveas(gcf,picturename,'jpg');

6 Risposte

  • Ci sono alcuni errori nel codice che hai pubblicato:

    In:
    
    foldername = fullfile(pwd, sprintf('prova%02', k));
    
    la stringa che definisce il formato è errata, manca l'identificatore del "tipo" (una "d" per specificare "integer")
    
    foldername = fullfile(pwd, sprintf('prova%02d', k));
    
    La condizione nel blocco "if" è errata:
    
    if exist(foldername, 'dir')
       mkdir("prova"+k);
    end
    
    impostata così crea la directory se la directory già esiste, devi invertirla aggiungendo "~":
    
    if(~exist(foldername, 'dir')
       mkdir("prova"+k);
    end
    
    nel blocco "if" dovresti anche gestire (nella parte "else" che, al momento manca, il caso nel quale le directory esista già.

    Per quanto riguarda la parte relativa al plotting ed al salvataggio, non sembrano esserci problemi, dovresti essere più chiaro nella spiegazione degli errori che incontri e, soprattutto, provare ad eseguire il codice in modalità debug.

    Da ultimo, non è chiaro cosa intendi con Sarebbe l'ideale non dover usare for in quanto il tutto va poi inserito in un codice abbastanza pesante.

    L'uso o meno di un loop dipende dai grafici che vuoi salvare e come / quando questi vengono creati dal tuo codice.

    In mancanza di altre informazioni / porzioni d codice significative, non si può aggiungere altro
  • Grazie mille.
    Colgo l'occasione per chiedere se è possibile creare una matrice random (4x4) di numeri compresi tra 0 ed 1(estremi esclusi) la cui somma orizzontale per ogni riga sia pari ad uno.
  • Puoi provare a:
    [*] creare la matrice (4 x 4) di numeri random
    [*] calcolare la somma dei valori di ogni riga
    [*] normalizzare i valori di ogni riga per il valore della loro somma
  • ask_raf ha scritto:


    Puoi provare a:
    [*] creare la matrice (4 x 4) di numeri random
    [*] calcolare la somma dei valori di ogni riga
    [*] normalizzare i valori di ogni riga per il valore della loro somma
    L'ultimo punto come potrei farlo?
  • Ho scritto male l'ultimo punto:

    "normalizzare i valori di ogni riga dividendoli per il valore della loro somma"
  • ask_raf ha scritto:


    Ho scritto male l'ultimo punto:

    "normalizzare i valori di ogni riga dividendoli per il valore della loro somma"
    Così facendo non andrei a creare 4 vettori di somme che poi, eventualmente, dovrei unire per creare una nuova matrice?
Devi accedere o registrarti per scrivere nel forum
6 risposte