matlab - 如何将数组分成矩阵中的不同行(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 循环,但仍然出现错误。先感谢您!
解决方案
这是一个不使用循环的解决方案。
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.';
推荐阅读
- html - 异常类型:NoReverseMatch - Django
- mysql - 计算 A 列和 B 列包含的值也出现在 B 列和 A 列中的次数
- sql-server - 从用户定义的业务规则操作存储过程中显示 SQL Server MDS 中的自定义异常消息
- javascript - 用 JS 删除特定的数字
- python - 您如何比较三个列表并将重复项添加到一个列表而将非重复项添加到另一个列表?
- c++ - 以下代码段完成了什么?
- ios - 在 CGPath 中找不到 CGPoint
- ios - 如果已使用 LongPressGesture,如何在 @State 中存储状态
- powershell - 如何将函数的结果保存到 Powershell 中的文本文件
- c# - 使用 select2 的 DropDownListFor 非常慢