MATLAB:创建没有"侧NaN"列的较小矩阵

jan*_*128 2 matlab

我正在使用一个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的情况,可能需要进一步检查.