推 sunev: 用 for loop? 09/08 16:30
→ celestialgod: A = B X D???? A:128x128x20, B:6x20 那D的維度? 09/08 17:06
→ celestialgod: 如果你是說B是6x20 D是6x6x20的話... 09/08 17:07
D將會是三維 128 x 128 x 6
這個問題簡單的說,就是把原本的2維矩陣能做的運算,擴充到3維
※ 編輯: victor6954 (60.249.249.211), 09/08/2015 17:24:54
※ 編輯: victor6954 (60.249.249.211), 09/08/2015 17:44:46
→ celestialgod: 我大概懂了,你是20個二維決戰做線性組合變成6個二 09/08 17:46
→ celestialgod: 維... 09/08 17:46
→ celestialgod: D=zeros(size(A, 1), size(A, 2), 6); 09/08 18:01
→ celestialgod: for i=1:6, D(:, :, i)=sum(cellfun@(x, y) x*y, m 09/08 18:01
→ celestialgod: at2cell(A, size(A, 1), size(A, 2), ones(1, size( 09/08 18:01
→ celestialgod: A, 3)), num2cell(B(i, :))), 3), end 09/08 18:01
→ celestialgod: 還沒試過,大概長這樣... 09/08 18:02
→ celestialgod: 這樣的話,我的式子好像變成BA=D..... 09/08 18:04
→ celestialgod: 請先忽略上面的式子QQ 09/08 18:09
推 profyang: 這種無解 乖乖用for loop吧 09/08 21:22
→ celestialgod: gpu有pagefun 不過一般矩陣不能用.... 09/08 21:37
→ celestialgod: 等MATLAB allow pagefun接受一般矩陣... 09/08 21:37
→ celestialgod: 這個case就可以一行了 09/08 21:38
推 tn00364361: 試看看這個 09/10 02:43
→ tn00364361: A_ = reshape(A, [128 * 128, 20])'; 09/10 02:44
→ tn00364361: D = reshape(B \ A_, [6, 128, 128])'; 09/10 02:44
→ tn00364361: 阿不對,應該要這樣 09/10 02:50
→ tn00364361: A_ = reshape(A, [128^2, 20])'; 09/10 02:51
→ tn00364361: D_ = B \ A_; 09/10 02:51
→ tn00364361: D = reshape(D_', [128, 128, 6]); 09/10 02:51
推 tn00364361: 這樣應該會跟for loop的結果一樣,但是速度快很多 09/10 02:53
推 tn00364361: 我比較了celestialgod的方法 速度大約是他第一個方法 09/10 14:16
→ tn00364361: 的兩倍,是他第二個方法的四倍 09/10 14:16
→ profyang: 樓上的方法應該跟底下那篇s大的方法差不多 09/10 15:03
→ tn00364361: 嗯的確是 09/11 00:32