如果我有给定的坐标[1 2; 4 5]
和
s = [
0.0 0.4 0.5 0.6 0.9
0.4 0.0 0.3 0.4 0.5
0.5 0.3 0.0 0.5 0.8
0.6 0.4 0.5 0.0 0.6
0.9 0.5 0.8 0.6 0.0
]
我想要以下结果:
A
应包含坐标和反向坐标的值。
即,在此示例中,A
包含(1,2)
,(2,1)
,(4,5)
,(5,4)
的值。那就是:A=[0.4, 0.4, 0.6, 0.6]
。
B
包含其余值,因此B=[0, 0.5, 0.6, 0.9, 0, 0.3, 0.4, 0.5, 0.5, 0.3, 0, 0.5, 0.8, 0.4, 0.5, 0, 0.9, 0.5, 0.8, 0.6, 0]
。
到目前为止,我有以下代码:
linindices = sub2ind(size(s), coordinates(:, 1), coordinates(:, 2))';
A = s(linindices)
B = s(setdiff(1:numel(s), linindices))
但只计算A=[0.4,0.6]
。
我怎样才能得到反坐标?
答案 0 :(得分:1)
实际上,你几乎就在那里。唯一的方法是获得反向坐标 - 您可以通过命令fliplr
来完成。
在这里,您可以看到如何使用整个代码和结果来完成它。批评界是Av
:
c=[1 2; 4 5];
s=[0 0.4 0.5 0.6 0.9
0.4 0 0.3 0.4 0.5
0.5 0.3 0 0.5 0.8
0.6 0.4 0.5 0 0.6
0.9 0.5 0.8 0.6 0];
Av=[c; fliplr(c)]
Ac=s(sub2ind(size(s),A(:,1),A(:,2)))
B=s(setdiff(1:numel(s),sub2ind(size(s),A(:,1),A(:,2))))'
Av =
1 2
4 5
2 1
5 4
Ac =
0.4000
0.6000
0.4000
0.6000
B =
0
0.5000
0.6000
0.9000
0
0.3000
0.4000
0.5000
0.5000
0.3000
0
0.5000
0.8000
0.6000
0.4000
0.5000
0
0.9000
0.5000
0.8000
0