特定时期的转数

时间:2016-10-05 12:06:21

标签: matlab matlab-figure

我想知道每个时期的革命次数。例如,时段1中的转数是3,并且时段2中的转数再次是3.但是不一定每个时段中的转数将是相同的。请参见示例:

Example

我尝试使用for循环,但它可以使用一段时间,有什么方法可以帮助我吗?

x = 0:33;
y1 = repmat([0 1].',17,1);
y2 = [0; 0; 0; 0; 0; 0; 5; 5; 5; 5; 5; 5; 5; 0; 0; 0; 0; 0; 0; 0;...
    5; 5; 5; 5; 5; 5; 5; 0; 0; 0; 0; 0; 0; 0];

换句话说,在y1时,如何知道y2每期中y2==5的总数?

find(y1(:,:)==1&y2==5)

1 个答案:

答案 0 :(得分:1)

这是一个想法:

x = 0:33;
y1 = repmat([0 1].',17,1);
y2 = [0; 0; 0; 0; 0; 0; 5; 5; 5; 5; 5; 5; 5; 0; 0; 0; 0; 0; 0; 0;...
    5; 5; 5; 5; 5; 5; 5; 0; 0; 0; 0; 0; 0; 0];

d = diff([y2(1) y2.']); % find all switches between diferent elements
len = 1:numel(y2); % make a list of all indices in y2
idx = [len(d~=0)-1 numel(y2)]; % the index of the end each group
counts = [idx(1) diff(idx)]; % the number of elements in the group
elements = y2(idx); % the type of element (0 or 5)
n_groups = numel(idx); % the no. of groups in the vector

rev = zeros(sum(elements==5),1);
c = 1;
for k = 1:n_groups
    if elements(k)==5
        rev(c) = sum(y1(idx(k)-counts(k)+1:idx(k)));
        c = c+1;
    end
end

结果是:

rev =
     3
     3