作者victor6954 (维克)
看板MATLAB
标题[问题]三维矩阵对二维矩阵的拟合
时间Tue Sep 8 16:28:23 2015
大家好,我是初入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://webptt.com/cn.aspx?n=bbs/MATLAB/M.1441700906.A.D97.html
1F:推 sunev: 用 for loop? 09/08 16:30
2F:→ celestialgod: A = B X D???? A:128x128x20, B:6x20 那D的维度? 09/08 17:06
3F:→ 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
4F:→ celestialgod: 我大概懂了,你是20个二维决战做线性组合变成6个二 09/08 17:46
5F:→ celestialgod: 维... 09/08 17:46
6F:→ celestialgod: D=zeros(size(A, 1), size(A, 2), 6); 09/08 18:01
7F:→ celestialgod: for i=1:6, D(:, :, i)=sum(cellfun@(x, y) x*y, m 09/08 18:01
8F:→ celestialgod: at2cell(A, size(A, 1), size(A, 2), ones(1, size( 09/08 18:01
9F:→ celestialgod: A, 3)), num2cell(B(i, :))), 3), end 09/08 18:01
10F:→ celestialgod: 还没试过,大概长这样... 09/08 18:02
11F:→ celestialgod: 这样的话,我的式子好像变成BA=D..... 09/08 18:04
12F:→ celestialgod: 请先忽略上面的式子QQ 09/08 18:09
13F:推 profyang: 这种无解 乖乖用for loop吧 09/08 21:22
14F:→ celestialgod: gpu有pagefun 不过一般矩阵不能用.... 09/08 21:37
15F:→ celestialgod: 等MATLAB allow pagefun接受一般矩阵... 09/08 21:37
16F:→ celestialgod: 这个case就可以一行了 09/08 21:38
17F:推 tn00364361: 试看看这个 09/10 02:43
18F:→ tn00364361: A_ = reshape(A, [128 * 128, 20])'; 09/10 02:44
19F:→ tn00364361: D = reshape(B \ A_, [6, 128, 128])'; 09/10 02:44
20F:→ tn00364361: 阿不对,应该要这样 09/10 02:50
21F:→ tn00364361: A_ = reshape(A, [128^2, 20])'; 09/10 02:51
22F:→ tn00364361: D_ = B \ A_; 09/10 02:51
23F:→ tn00364361: D = reshape(D_', [128, 128, 6]); 09/10 02:51
24F:推 tn00364361: 这样应该会跟for loop的结果一样,但是速度快很多 09/10 02:53
25F:推 tn00364361: 我比较了celestialgod的方法 速度大约是他第一个方法 09/10 14:16
26F:→ tn00364361: 的两倍,是他第二个方法的四倍 09/10 14:16
28F:→ profyang: 楼上的方法应该跟底下那篇s大的方法差不多 09/10 15:03
29F:→ tn00364361: 嗯的确是 09/11 00:32