【发布时间】:2021-02-12 08:58:48
【问题描述】:
【问题讨论】:
-
如果
x是你的矩阵,那么你可以用[~,ind]=max(isnan(x),[],2)得到索引
【问题讨论】:
x是你的矩阵,那么你可以用[~,ind]=max(isnan(x),[],2)得到索引
这个方法可能是一个实现。它使用Logical_Array 表示NaN 值使用“1”,non-NaN 值使用“0”。然后使用find() 的每一行返回所有“0”/non-NaN 数字的索引。通过使用max() 评估最大索引,可以为每一行检索最后/最大列。取最大值可以适应NaN 值分散的场景。
Matrix = [1 2 NaN 4 5;
1 NaN 3 NaN 5;
1 2 NaN NaN NaN];
[Matrix_Height,~] = size(Matrix);
Logical_Array = isnan(Matrix);
for Row = 1: +1: Matrix_Height
Target_Row = Logical_Array(Row,:);
[Minimum,Indices] = find(Target_Row == 0);
Last_Non_NaN_Index = max(Indices);
Matrix(Row,Last_Non_NaN_Index) = NaN;
end
Matrix
第 1 行:5 → NaN
第 2 行:5 → NaN
第 3 行:2 → NaN
使用 MATLAB R2019b 运行
【讨论】:
将x 视为:
x = [1 2 3 nan;
3 4 nan nan;
1 nan nan nan;
nan nan nan nan]
您可以通过以下方式获取每一行的第一个 nan 值的索引:
[~,ind]=max(isnan(x),[],2);
然后使用sub2ind:
x(sub2ind(size(x),max(ind.'-1,1),1:length(x))) = nan
或单线:
x((circshift(isnan(x),-1)+isnan(x))>0)=nan
【讨论】: