如何计算数组开头和结尾的相邻零的数量?

时间:2014-12-24 01:15:37

标签: arrays matlab

假设我有以下数组r

>> A=[1:10];
>> r=(A>=2&A<=8)
r =
     0     1     1     1     1     1     1     1     0     0

如何计算数组每一侧的零数?

1 个答案:

答案 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

您可以使用其他一些示例来证明其有效:

示例#1

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

示例#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

示例#3

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和行向量。