在Matlab中获取给定坐标的值

时间:2015-06-14 08:37:11

标签: matlab

如果我有给定的坐标[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]。 我怎样才能得到反坐标?

1 个答案:

答案 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