Tôi gặp sự cố khi sử dụng các mảng cấu trúc trong vòng lặp parfor của Matlab. Các mã sau đây có 2 vấn đề tôi không hiểu:Sử dụng các mảng cấu trúc trong 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
- Nó không thành công với một lỗi
Error using parallel_function (line 589) Insufficient number of outputs from right hand side of equal sign to satisfy assignment.
- Mở đầu ra, biến
s
là một vector, không phải là một mảng (như nó phải được, ngay cả khi ngắt mã trước khi kết thúc).
EDIT vấn đề được giải quyết nếu tôi khởi tạo các mảng struct để kích thước chính xác, bởi:
s=struct('a',cell(2,4),'b',cell(2,4));
Tuy nhiên, tôi vẫn sẽ rất vui khi có được những hiểu biết về vấn đề này (ví dụ như là nó tập hợp một lỗi, theo gợi ý của Oleg Komarov)
Đối với điểm 2, điều gì làm bạn có nghĩa là "mảng" hơn là "vector"? Trong Matlab không có sự phân biệt. Có vẻ như tôi 's' nên là một ma trận 2x4 của' struct 'ở cuối mã này. – jazzbassrob
Tôi nghĩ rằng nó thực sự là một lỗi và tôi khuyên bạn nên gửi một [hỗ trợ equest] (http://www.mathworks.it/support/service_requests/contact_support.do?) Và giữ cho chúng tôi cập nhật. – Oleg
@jazzbassrob, một vectơ là một mảng 1xd (hoặc dx1). –