假设我有以下数组r
:
>> A=[1:10];
>> r=(A>=2&A<=8)
r =
0 1 1 1 1 1 1 1 0 0
如何计算数组每一侧的零数?
答案 0 :(得分:1)
我假设您要计算数组中前导零和尾随零的数量。我们可以使用两个find
调用来执行此操作,仅搜索第一次出现的非零元素。第一个非零元素的索引减去1将告诉您有多少个领先的零。我们减去1的原因是由于MATLAB从1开始索引数组的方式。如果它们从0开始,则不需要减法。如果您想要尾随零,请查找最后非零元素。从这一点到结尾的元素数量是有多少零元素。因此:
num_leading = find(r, 1, 'first') - 1;
num_trailing = numel(r) - find(r, 1, 'last');
通过您的示例,我们得到以下信息:
num_leading =
1
num_trailing =
2
您可以使用其他一些示例来证明其有效:
r = [1 1 1 1 1 0 1 0 0];
num_leading = find(r, 1, 'first') - 1
num_trailing = numel(r) - find(r, 1, 'last')
num_leading =
0
num_trailing =
2
r = [1 1 1 0 0 1 1 1 0 1];
num_leading = find(r, 1, 'first') - 1
num_trailing = numel(r) - find(r, 1, 'last')
num_leading =
0
num_trailing =
0
r = [0 0 1 0 1 1 0 1 0 0];
num_leading = find(r, 1, 'first') - 1
num_trailing = numel(r) - find(r, 1, 'last')
num_leading =
2
num_trailing =
2
如您所见,这可以适应阵列可以采用的任何形状,只要它是1D和行向量。