MATLAB Answers

Anastasia
0

create a sliding window to determine when a % of numbers in a sequence equal a certain value.

Anastasia
さんによって質問されました 2016 年 4 月 25 日
最新アクティビティ Anastasia
さんによって コメントされました 2016 年 4 月 26 日
Hello! I am new to Matlab, thank you in advance for helping me. I have a serie (called S) of around 800 numbers (or more) composed of values 1,2 or 4 (for ex. 111122111142222211 etc). In this series, I would like to find out when for every 100 numbers for ex. (this number can vary) more than/or equal to 80% (the % can vary) of the numbers have the value 2. Is it possible to create something like a sliding window which would slide through the serie S (beginning by 1-100, then 2-101, then 3-102 something like that) and tell me at what point >80% of the numbers have value 2? Thank you very much in advance, and feel free to ask me any questions!

  1 件のコメント

Azzi Abdelmalek
2016 年 4 月 25 日
This is not clear, you can explain your problem with a short example,and post the expected result.

サインイン to comment.

1 件の回答

回答者: David Young
2016 年 4 月 25 日

The answer to problems involving a sliding window is very often to use the convolution operation, as here.
% some random test data, with 1s, 2s and 4s (mainly 2s)
N = 800; % length of series
S = ones(1, N);
r = rand(1, N);
S(r < 0.75) = 2;
S(r > 0.9) = 4;
fprintf('First 20 values: '); fprintf('%d ', S(1:20)); fprintf('\n');
% Now the computation to find where a window of 100 has more than a
% certain fraction of twos
% parameters for the search
windowLength = 100;
testPercent = 80;
% find which of the values are 2
twoPositions = S == 2;
% count the number of twos in each window of length 100
twoSums = conv(double(twoPositions), ones(1, windowLength), 'valid');
% find the positions where the threshold is exceeded
manyTwos = find(twoSums >= windowLength * testPercent / 100);
% Print out the positions of the start of the window where
% there are the required number of twos
fprintf('Positions with many twos: '); fprintf('%d ', manyTwos); fprintf('\n');

  1 件のコメント

Anastasia
2016 年 4 月 26 日
Thank you very much for your response. So, in my program, I only use this part, right?
% Now the computation to find where a window of 100 has more than a % certain fraction of twos % parameters for the search windowLength = 100; testPercent = 80; % find which of the values are 2 twoPositions = S == 2; % count the number of twos in each window of length 100 twoSums = conv(double(twoPositions), ones(1, windowLength), 'valid'); % find the positions where the threshold is exceeded manyTwos = find(twoSums >= windowLength * testPercent / 100); % Print out the positions of the start of the window where % there are the required number of twos fprintf('Positions with many twos: '); fprintf('%d ', manyTwos); fprintf('\n');
It seems to be working well, i should test some more :)
However, I was wondering if it is possible to plot the result rather than print out the positions of the start of the window? Thank you again!

サインイン to comment.



Translated by