Ho problemi con l'uso di struct array nel ciclo parfor di Matlab. Il seguente codice ha 2 problemi che non comprendo:Utilizzo di struct matrici in parfor
s=struct('a',{},'b',{});
if matlabpool('size')==0
matlabpool open local 2
end
for j = 1:2
parfor k=1:4
fprintf('[%d,%d]\n',k,j)
s(j,k).a = k;
s(j,k).b = j;
end
end
matlabpool close
- Si riesce con un errore
Error using parallel_function (line 589) Insufficient number of outputs from right hand side of equal sign to satisfy assignment.
- In uscita, variabile
s
è un vettore, non un array (come dovrebbe essere, anche se il interruzioni di codice prima di finire).
EDIT il problema è risolto se inizializzare l'array struct alla dimensione corretta, da:
s=struct('a',cell(2,4),'b',cell(2,4));
Tuttavia, vorrei ancora felice di ottenere approfondimenti in merito al problema (ad esempio, è vero rally un bug, come suggerito da Oleg Komarov)
Per il punto 2, che cosa vuoi dire "allineamento" piuttosto che "vettore"? In Matlab non c'è distinzione. Mi sembra che 's' dovrebbe essere una matrice 2x4 di' struct's alla fine di questo codice. – jazzbassrob
Penso che in realtà sia un bug e consiglio di inviare un [supporto equest] (http://www.mathworks.it/support/service_requests/contact_support.do?) E di tenerci aggiornati. – Oleg
@jazzbassrob, un vettore è un array 1xd (o dx1). –