Ciclo while

di il
1 risposte

Ciclo while

Buongiorno a tutti!

Spero possiate aiutarmi

ho provato ad implementare questo codice:

p(1:35040,1)=randi([0;10],35040,1);
j=0
while j<35040
if p(find(p(1+j:16+j)<=4))=0
elseif p(find(p(1+j:16+j)>4))=1
endif
j=j+96
endwhile

Sono riuscita nel mio intento solo per i primi 16 valori del vettore, io in realtà vorrei riuscire ad ottenere la stessa cosa per i primi 16 valori ogni 96 valori. spero di essermi spiegata bene. sono abbastanza disperata perchè non riesco a farmi tornare il ragionamento.... spero troviate il mio errore!
Grazie a tutti

1 Risposte

  • Re: Ciclo while

    Non c'è bisogno di un ciclo while.

    Una possibile soluzione potrebbe essere:
    [*] fare una copia del vettore diinout
    [*] identificare tutti i valori del vettore di input che verificano le due soglie ed assegnargli i nuovi valori
    [*] creare una maschera di indici che identifichi gli indici degli elementi del vettore che vuoi modificare (i primi 16 di ogni gruppo di 96)
    [*] usare la maschera di indici per assegnare al vettore di input (od a una sua copia, per conservare quello originale, ad esempio per verifiche) i valori modificati

    Una possibile implementazione potrebbe essere quella che segue, fatta su un vettore di 30 elementi ed assegnando i valori NaN e Inf al posto di 0 e 1 (come nel tuo caso) solo per facilitare la visualizzazione del risultato:
    
    % Numero totale valori
    n_val=30;
    % Valore di soglia
    soglia=4;
    % Passo del ruppo di valori
    passo=6;
    % Sotto passo del ruppo di valori
    sub_set=3;
    
    % Creazione dati di
    v=randi([0 10],n_val,1);
    % Creazione di una coia dei valiri di input
    v0=v;
    % Identificazione di tutti i valori che verificano le soglie e settaggio dei nuovi valori
    v0(v0 <= soglia)=NaN;
    v0(v0 > soglia)=Inf;
    % Creazione di una maschera di indici:
    %    1 per gli indici dei valori da considerare per ogni set
    %    0 per gli alri indici
    idx=logical(repmat([ones(sub_set,1);zeros(passo-sub_set,1)],n_val/passo,1))
    % Creazione di una copia del vettore originale
    v2=v;
    % Assegnazione dei nuovi valori
    v2(idx)=v0(idx)
    % Display (solo per verifica del risultato)
    % v: vettore originale
    % v2 vettore modificato
    % idx: indici dei valori che dovevano essere modificati
    m=[v v2 idx]
    
Devi accedere o registrarti per scrivere nel forum
1 risposte