我是matlab的半新手,并编写了一个while循环,它将通过扫描数据集从数据集生成一个值,直到数据行超过阈值。这是代码的一部分:
c = 1;
while min(obj_cont1(c:c+Grip_sample_length,n)) < Grasp_Threshold
c = c + 1;
end
contact_time_index(n,1) = c;
问题是,这部分代码是在一个更大的for循环中,代码是为了找到数据部分高于这个“grip_threshold”的第一个值(我手动设置的值)。我的问题是:如果没有值符合这个标准,有没有办法让代码输入一个值(如零或null)来表明它已经通过,没有找到结果,所以它去了到下一个数据集?现在,如果代码没有找到结果,它将在for循环中运行所有试验,但最后会给我一个错误。
我希望这很清楚。我的matlab术语需要一些开发,就像我的编码技巧一样
提前谢谢!
答案 0 :(得分:0)
这是一个可以帮助你显着的例子。
假设我运行以下命令:
x = [];
for i = 1:10
x(i) = i^2;
end
现在,如果我想获得日志大于5的所有元素或者真正评估为任何函数的true,我可以这样做
elementsGreaterThan5 = x(log(x) > 5)
我建议使用这种方法来找到你需要的元素
请参阅逻辑索引Matrix Indexing in Matlab
答案 1 :(得分:0)
使用max
返回第一个最大元素(即0-1数组中的第一个),您的代码等效于此:
[is_above, first_idx_above_tsh] = max(obj_cont1(:,n) >= Grasp_Threshold);
contact_time_index(n,1) = max(first_idx_above_tsh - Grip_sample_length, 1);
其中is_above
会告诉您是否有超出阈值的元素。
如果您有一个外部for循环并且Grasp_Threshold
和Grip_sample_length
已修复,则您甚至不需要将此计算放入for循环中:
[is_above, first_idx_above_tsh] = max(obj_cont1 >= Grasp_Threshold);
contact_time_index(:,1) = max(first_idx_above_tsh - Grip_sample_length, 1);
此处is_above
和first_idx_above_tsh
都是向量。