Deleted first repeated elements of an array
조회 수: 5 (최근 30일)
이전 댓글 표시
Hello, I am trying to process a data vector, ignoring the B first and C last samples of each trial. It should be the following:
A = [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5] % data vector
B= 1 % delete n initial repeated values
C=2 % delete n final repeated values
Replacing unwanted data for -1 for example
A = [-1,1,1,1,1,-1,2,2,2,2,-1,3,3,3,3,-1,4,4,4,4,-,5,5,5,5] %removing the n = 1 first elements of each repeated streak
A= [-1,1,1,-1,-1,-1,2,2,-1,-1,-1,3,3,-1,-1,-1,4,4,-1,-1,-1,5,5,-1,-1] % removing the n=1 first and n = 2last elements of each repeated streak
Any help please?
댓글 수: 1
Walter Roberson
2019년 12월 2일
Is the length of each "trial" the same and known? Or is the rule about "streaks" as implied in the comments?
채택된 답변
Adam Danz
2019년 12월 2일
편집: Adam Danz
2019년 12월 3일
Here's a demo. The first section just creates demo inputs. The second section solves your question. The third section just confirms that the output matches your expected output.
See inline comments for details
% Build inputs
A = [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5];% % data vector
B = 1; % delete n initial repeated values
C = 2; % delete n final repeated values
%desired outcome (for comparison)
A_desired = [-1,1,1,-1,-1,-1,2,2,-1,-1,-1,3,3,-1,-1,-1,4,4,-1,-1,-1,5,5,-1,-1];
% Identify groups of consecutive values
da = cumsum([1,diff(A)~=0]);
aGroupIdx = arrayfun(@(x)find(da==x),unique(da),'UniformOutput',false);
% Replace the first B repeats with filler
% and the last C repeats with filler
filler = -1;
Anew = A;
for i = 1:numel(aGroupIdx)
Anew(aGroupIdx{i}(1:min(B,numel(aGroupIdx{i})))) = filler;
Anew(aGroupIdx{i}(max(1,numel(aGroupIdx{i})-C+1):end)) = filler;
end
% Check that it matches the expected outcome
isequal(A_desired, Anew)
댓글 수: 6
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Logical에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
