# Counting how many times a number occured after a specific number

조회 수: 3(최근 30일)
답변: AB WAHEED LONE 2021년 12월 14일
Lets say I have a sequence of numbers ranging from 1 to 4, S = [ 3 2 2 4 3 1 ]. I want a 4x4 matrix which tells me how many times I went from say 3 to 2 or 4 to 1. It would look like this: M = [ 0 0 0 0; 0 1 0 1; 1 1 0 0; 0 0 1 0]. Sounds simple, but I'm out of thoughts. Thanks.
##### 댓글 수: 1표시숨기기 없음
darova 2020년 4월 10일
Can you explain more? I don't understand

댓글을 달려면 로그인하십시오.

### 채택된 답변

Kelly Kearney 2020년 4월 10일
This is a good use case for accumarray:
S = [ 3 2 2 4 3 1];
[seq, ~, g] = unique([S(1:end-1)' S(2:end)'], 'rows');
n = accumarray(g, ones(size(g)));
M = zeros(4);
idx = sub2ind(size(M), seq(:,1), seq(:,2));
M(idx) = n;
##### 댓글 수: 3표시숨기기 이전 댓글 수: 2
Kelly Kearney 2020년 4월 10일
Though apparently the call to unique is unnecessary... possibly what you were suggesting?
S = [ 3 2 2 4 3 1 3 2];
accumarray([S(1:end-1)' S(2:end)'], 1)
ans =
0 0 1 0
0 1 0 1
1 2 0 0
0 0 1 0
I learned something new!

댓글을 달려면 로그인하십시오.

### 추가 답변(2개)

Andrei Bobrov 2020년 4월 10일
accumarray(hankel(S(1:end-1),S(end-1:end)),1)
##### 댓글 수: 0표시숨기기 이전 댓글 수: -1

댓글을 달려면 로그인하십시오.

AB WAHEED LONE 2021년 12월 14일
for example , S= [1 2 2 3 1;
1 3 1 3 4;
1 3 4 1 3;
1 3 4 1 3;
1 3 4 1 3];
When i tried to count the same ((1,1),(1,2),(1,3),(1,4),(2,2),(2,3), etc), it just creates the square matrix of max element size.
for example in case of first row X=[1 2 2 3 1], the size of output matrix is 3*3 ,which should have been 4*4.
could you comment on this.

댓글을 달려면 로그인하십시오.

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by