我正在使用一个30*26000大小的矩阵,在开始和结束时都有NaN.NaN也洒在每一排.我可以用线性插值填充NaN,但是会在每行的开头和结尾留下NaN.外推以在末端替换这些NaN对于我的数据集来说并不理想.
我想修剪矩阵.以3乘6矩阵为例:
NaN NaN 1 2 3 NaN
NaN 1 2 3 NaN NaN
1 NaN 2 3 4 5
Run Code Online (Sandbox Code Playgroud)
切断最左侧和最右侧的列,使得没有行以NaN 开始或结束.
1 2
2 3
2 3
Run Code Online (Sandbox Code Playgroud)
所以我们留下了一个3乘2的矩阵.
我怎样才能在Matlab中做到这一点?(速度优化;我需要将其应用于百万大小的矩阵)
谢谢!
小智 7
对于您的示例,您可以执行以下操作:
让你的矩阵用NaN和数值.
ind1 = sum(isnan(a),1); % count the NaN values along columns
s = find(ind1 == 0, 1, 'first'); % find the first column without any NaN
e = find(ind1 == 0, 1, 'last'); % find the last column without any NaN
所以现在只需将矩阵的这一部分从第s列保留到第e列:
b = a(:,s:e);
对于没有色谱柱没有NaN的情况,可能需要进一步检查.