Tôi không có đủ bộ nhớ để tạo một ma trận D-by-D chéo, vì D lớn. Tôi tiếp tục bị lỗi 'hết bộ nhớ'.Hiệu quả nhân các ma trận rất lớn trong MATLAB
Thay vì thực hiện các thao tác M x D x D trong phép nhân thứ nhất, tôi thực hiện các thao tác M x D, nhưng mã của tôi vẫn mất nhiều thời gian để chạy.
Ai có thể tìm cách hiệu quả hơn để thực hiện phép nhân A'*B*A
? Dưới đây là những gì tôi đã cố gắng cho đến nay:
D=20000
M=25
A = floor(rand(D,M)*10);
B = floor(rand(1,D)*10);
for i=1:D
for j=1:M
result(i,j) = A(i,j) * B(1,j);
end
end
manual = result * A';
auto = A*diag(B)*A';
isequal(manual,auto)
Tôi đang bối rối. Ma trận B có phải là D-by-D hay M-by-M không? Hình ảnh của bạn nói rằng trước đây nhưng mã của bạn cho thấy sau này. – gnovice
cũng được phát hiện, hiện đã sửa đổi – matcheek
Ngoài ra, bạn đang cố tính A * B * A, điều này sẽ cho bạn kết quả M-by-M? – gnovice