In un compito A (:) = B, il numero di elementi in A e B deve essere lo stesso

Quando provo ad eseguire il mio codice, ad esempio

for ii= 1:10 output(ii)=rand(3); end 

Ottengo l’errore

 In an assignment A(:) = B, the number of elements in A and B must be the same 

o

 In an assignment A(I) = B, the number of elements in B and I must be the same. 

Cosa significa questo errore? Qual è l’approccio per liberarsene?

Questo errore deriva dal tentativo di riempire un blocco variabile con più (o meno) valori rispetto alla sua dimensione. In altre parole, hai un’istruzione size(A(:)) A(:)=B su dove la size(A(:)) è diversa dalla size(B) .

Nell’esempio della domanda, rand(3) restituisce una matrice 3x3 , tuttavia, l’ output(ii) è solo un singolo valore (anche se l’ output può essere più grande, l’ output(ii) è solo un singolo valore di output ), quindi il valore restituito da rand(3) non si adatta output .

Per risolvere questo problema, è necessario modificare la dimensione della variabile di output , in modo da avere spazio per adattarsi a tutti i risultati.

Ci sono 2 modi per farlo. Uno di questi è creando una matrice che si adatti al ritorno, ad esempio output=zeros(3,3,10) .

Quindi possiamo cambiare il codice in

 for ii= 1:10 output(:,:,ii)=rand(3); end 

In alternativa, è ansible riempire l’ output come un array di celle . Ciò è particolarmente utile quando il ritorno della funzione cambia ogni volta le dimensioni, ad esempio rand(ii);

In tal caso, il seguente potrebbe funzionare

 for ii= 1:10 output{ii}=rand(ii); end 

È probabile che, a differenza dell’esempio nella domanda, nel caso reale non si conosca la dimensione di ciò che restituisce l’output, quindi non si sa quale delle due opzioni utilizzare per correggere il codice.

Sul ansible modo di imparare che, si sta triggersndo la guida di debug quando si verificano errori di codice, digitando dbstop if error nella riga di comando. Questo attiverà un arresto di debug quando MATLAB genera un errore, e puoi digitare size(rand(ii)) e size(output(ii)) per vedere le dimensioni di entrambi.

Spesso, anche la lettura della documentazione della funzione utilizzata aiuta a vedere se sono possibili diverse dimensioni.

Detto questo, la seconda opzione, gli array di celle, assicureranno sempre che tutto vada bene. Tuttavia, le matrici sono generalmente più veloci e facili da usare in MATLAB, quindi, se ansible, dovresti mirare alla soluzione basata su matrice.