使用 Matlab 进行排序(有条件)


使用

Matlab,我想使用第 2 列中的接收信号强度 (RSS) 值按降序对以下无线传感器读数进行排序。我想找到对应于三个最高 RSS 值的坐标的平均值。列 3 是每个传感器的坐标,而列 4 是第 1 列中传感器可见的无线传感器。

但是,必须满足一个条件。要选择的三个最高值必须彼此可见。例如,如果选择传感器 A、D、F,则传感器

D 和 F 必须对 A 可见,传感器 A 和 D 必须对 F 可见,传感器 A 和 F 必须可见 D。
Column 1    Column 2    Column 3                Column 4 
                                        (Sensors that are visible to 
                                        the sensor in Column 1)
  A          -45          1,1                  B,C,D,E,H
  B          -90          1,5                  A,D,C,E,H
  C          -50          3,9                  A,B,E,H,G
  D          -54          4,2                  A,C,B,F,G
  E          -70          4,6                  C,D,H,G
  F          -57          7,2                  B,D,H,I
  G          -75          7,6                  D,B,I,E
  H          -64          6,9                  E,D,G,I
  I          -23          9,9                  H,G,F,B

期待任何形式的帮助。感激

这是我在第一部分得到的,按降序对数据进行排序:

data = cell(9,4); 
col1 = ['A','B','C','D','E','F','G','H','I'];
col2 = [-45,-90,-50,-54,-70,-57,-75,-64,-23];
col3 = [{'1,1'},{'1,5'},{'3,9'},{'4,2'},{'4,6'},{'7,2'},{'7,6'},{'6,9'},{'9,9'}];
col4 = [{'B,C,D,E,H'},{'A,D,C,E,H'},{'A,B,E,H,G'},{'A,C,B,F,G'},{'C,D,H,G'},{'B,D,H,I'},{'D,B,I,E'},{'E,D,G,I'},{'H,G,F,B'}];
for i = 1:length(data)
    data{i,1} = col1(i);
    data{i,2} = col2(i);
    data{i,3} = col3(i);
    data{i,4} = col4(i);
end
[trash idx] = sort([data{:,2}],'descend');
newdata = data(idx,:);

然后对于第二部分,这将用于查找对应于三个最高 RSS 值的坐标的平均值,但没有要选择的三个最高值必须彼此可见的条件。

for i = 1:3
    coord = str2num(cell2mat(newdata{i,3}));
    coord_ave(i) = mean(coord);
end

我会看看我是否可以在条件上弄清楚任何事情,如果我这样做,我会发布一些东西。现在我认为使用 strfind 可以像下面这样将第 1 列和第 4 列相互比较,但需要一些额外的步骤才能在所有数据中找到 3 个最大匹配项:

current_max_sens = newdata{i,1};
cell2mat(strfind(cellstr(newdata{3,4}),current_max_sens))

我希望这至少能给你一个起点。

最新更新