为了在Matlab中找到以下公式的输出,我需要PDA
在不使用任何循环的情况下获得矩阵的所有元素(在下面的代码中),除了其第一个元素。
公式(目标): % EVec = (A11-B11).^2 - (A12-B12).^2 - .. - (Aij-Bij).^2
例如:
A(:,:,1) = [1 2 3 4; 4 5 6 1];
A(:,:,2) = [0 5 4 3; 2 7 6 0];
A(:,:,3) = [1 2 3 9; 0 6 7 0];
B(:,:,1) = [4 0 3 4; 4 8 0 1];
B(:,:,2) = [0 5 6 1; 0 9 4 3];
B(:,:,3) = [2 0 3 5; 8 6 7 2];
PDA = (A-B).^2;
EVec = PDA(1,1,:) - sum(PDA(?, ?, :)); % The problem is sum(PDA(?, ?,:)).
PDA的结果是:
PDA(:,:,1) =
9 4 0 0
0 9 36 0
% All of them except Val(1,1) = 9.
PDA(:,:,2) =
0 0 4 4
4 4 4 9
% All of them except Val(1,1) = 0.
PDA(:,:,3) =
1 4 0 16
64 0 0 4
% All of them except Val(1,1) = 1.
我的问题是输出的PDA(1,1,:) - sum(PDA(?, ?, :))
内容应该是:9-(4+0+0+0+0+9+36+0), 0-(0+4+4+4+4+4+9), 1-(4+0+16+64+0+0+4) = [-40, -29, -87].
不幸的是,事实并非如此。
如何获取矩阵中除第一个元素外的所有元素?
第一个元素减去其余元素的总和只是第一个元素减去所有元素的总和的两倍,因此
>> squeeze(2*PDA(1,1,:) - sum(sum(PDA,1),2))
ans =
-40
-29
-87
或在较新版本中
>> squeeze(2*PDA(1,1,:) - sum(PDA,[1,2]))
ans =
-40
-29
-87
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句