我知道如何从矩阵中查找具有负值的索引。
matrix(matrix<0) = %something should be done;
但不知道如何用最接近的恰好为正的索引值替换它们的值。
这里最近的索引应该与观察到的索引位于同一行。
如果该行中没有具有正值的索引,则应将该行的每个索引插入 0。
如果同一行中有多个与观察到的索引最接近的索引,请选择正确的一个。
我正在处理 1003x1170 单矩阵。因此,如果解决方案不会带来如此多的开销,那就最好了。
例如,
[-255 4 6;
-5 -4 5;
-400 3 6;
-6 -7 -8;
3 -5 4]
Becomes
[4 4 6;
5 5 5;
3 3 6;
0 0 0;
3 4 4]
您可以使用fillmissing https://www.mathworks.com/help/matlab/ref/fillmissing.html函数,如下:
- 将负值替换为
NaN
。这是需要的,因为,对于single
or double
input, fillmissing
考虑NaN
条目作为缺失值。
- Use
fillmissing
与'nearest'
选项和沿维度操作2
。如果有两个等距的数据值,fillmissing
显然选择右边的一个(我还没有找到这个记录,我也无法从源代码中确认它)。
- 更换任何剩余的
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)