如何找到具有负值的索引并将该值替换为恰好为正的最接近的索引值?

mrk*_*102 2 matlab interpolation image-processing matrix computer-vision

我知道如何从矩阵中找到负值的索引。

matrix(matrix<0) = %something should be done;
Run Code Online (Sandbox Code Playgroud)

但是不知道如何将它们的值替换为恰好为正的最接近的索引值。

  1. 此处最近的索引应位于观察索引所在的同一行中。

  2. 如果行中没有具有正值的索引,则应将 0 插入到该行的每个索引中。

  3. 如果同一行中与观察到的索引最接近的索引不止一个,请选择正确的索引。

  4. 我正在处理 1003x1170 单矩阵。因此,如果解决方案不会带来如此多的开销,那将是最好的。

例如,

[-255  4  6; 
   -5 -4  5; 
 -400  3  6; 
   -6 -7 -8;
    3 -5  4] 
Run Code Online (Sandbox Code Playgroud)

成为

[4 4 6; 
 5 5 5; 
 3 3 6;
 0 0 0;
 3 4 4]
Run Code Online (Sandbox Code Playgroud)

Lui*_*ndo 6

您可以使用该fillmissing函数执行此操作,如下所示:

  1. 用 替换负值NaN。这是必需的,因为对于singledouble输入,fillmissingNaN条目视为缺失值。
  2. fillmissing'nearest'选项一起使用并沿维度操作2。如果有两个等距的数据值,fillmissing 显然会选择右边的一个(我没有找到这个文档,我也无法从源代码中确认)。
  3. 将任何剩余NaN值(对应于不包含非负值的行)替换为0.

matrix = [-255 4 6; -5 -4  5; -400 3 6; -6 -7 -8; 3 -5 4];  % data
matrix(matrix<0) = NaN;                                     % step 1
matrix = fillmissing(matrix, 'nearest', 2);                 % step 2
matrix(isnan(matrix)) = 0;                                  % step 3
Run Code Online (Sandbox Code Playgroud)