Re: [討論] 三維矩陣運算已回收

看板MATLAB作者 (oversky0)時間14年前 (2011/10/21 11:04), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
下面的程式你試試看。 如果 P 比 M,N 小, 第二種、第三種方法會比較快, 第三種方法又是最吃記憶體的。 在我的電腦上,M = 1000, N = 1000, P = 10 t1 = 4.65 t2 = 0.51 t3 = 0.32 這裏有個小問題也請大家看看, 如果我把 A = round(A); 去掉, 會發現 B1 的結果和 B2, B3 不同, 應該是精度的問題。不知那個是正確的? clc;100 clear all; M = 1000; N = 1000; P = 10; A = 10*rand(M,N,P); A = round(A); % A = zeros(M,N,P); % for i = 1:P % A(:,:,i) = i; % end V = 1:P; % Algorithm 1 A = shiftdim(A,2); tic; B1 = zeros(M,N); for i = 1:M for j = 1:N B1(i,j) = V*A(:,i,j); end end t1 = toc; A = shiftdim(A,1); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Algorithm 2 tic; temp = zeros(M,N,P); for i = 1:P temp(:,:,i) = A(:,:,i)*V(i); end B2 = sum(temp,3); clear temp; t2 = toc; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Algorithm 3 tic v = repmat(reshape(V, [1 1 P]), [M N]); temp = bsxfun(@times, A, v); B3 = sum(temp,3); clear temp; t3 = toc; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% isequal(B1,B2,B3) isequal(B1,B2) isequal(B2,B3) isequal(B1,B3) t1 t2 t3 ※ 編輯: oversky0 來自: 220.128.221.133 (10/21 11:08)
文章代碼(AID): #1EeE5Ns0 (MATLAB)
文章代碼(AID): #1EeE5Ns0 (MATLAB)