看板 MATLAB 關於我們 聯絡資訊
大家好,我是初入matlab世界的新手 有個問題想要請教各位 我現在有一個 128 X 128 X 20 的三維 A 矩陣, 以及一個 6 X 20 的二維 B 矩陣, 想要由這兩個矩陣求出三維 D 矩陣, 其式為 A = B X D。 目前嘗試取出 A 矩陣的一條 Z 方向轉換為 A1 = 20 X 1 的矩陣後, 用D=B\A, 可以求出 6 X 1 的矩陣 http://imgur.com/VIVjA27 然而,卻無法直接計算三維矩陣 (error : Input arguments must be 2-D.) 與二維的差別是,A與D矩陣,每個單一值變成128X128的矩陣 想請問要如何解出三維 D 矩陣 http://imgur.com/NTAb6Ln A矩陣應該要如何進行轉換,或是是否有直接計算的語法 謝謝各位了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.249.251.232 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1441700906.A.D97.html
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