首页 > 解决方案 > 如何将数组分成矩阵中的不同行(Matlab)

问题描述

我正在尝试使用 For 循环(或实际上任何有效的形式)构建一个 NaN 矩阵,该矩阵将数组的一部分作为其行

例如:

W = [0 0 0 2 3 2 0 0 4 5 6 6 5 0 0 0 0 8 8 9 8 0 0 0 0 ... ]

每当有由零引起的制动时,我只想迭代数字而不是零,这样每当有数字再次被零分隔时,它每次在我的新矩阵中形成一个新行,导致:

Matrix = NaN(5) %just big enough to fit everything
Matrix =  [2 3 2 NaN NaN; 4 5 6 6 5;8 8 9 8 NaN] % and so forth

*我一直在为此使用嵌套的 For 循环,但仍然出现错误。先感谢您!

标签: matlab

解决方案


这是一个不使用循环的解决方案。

W = [0 0 0 2 3 2 0 0 4 5 6 6 5 0 0 0 0 8 8 9 8 0 0 0 0];
W_idx = logical(W);
lbl = cumsum([diff([false W_idx]) > 0]) .* W_idx;
%lbl = bwlabel(W_idx) %use the image processing toolbox
count = accumarray(lbl(:)+1,1).';
count = count(2:end);
result_idx = (1:max(count)).' <= count ;
result = NaN(size(result_idx));
result(result_idx) = W(W_idx);
result = result.';

结果:

result =

     2     3     2   NaN   NaN
     4     5     6     6     5
     8     8     9     8   NaN

如果您需要数字索引,您可以为时间索引创建一个单独的数组:

time_data = 1:25;
time_result = NaN(size(result_idx));
time_result(result_idx) = time_data(W_idx);
time_result = time_result.';

推荐阅读