Extract sequences from vector

조회 수: 3 (최근 30일)
Peter
Peter 2013년 2월 27일
답변: Saeid Abrari 2020년 10월 6일
Dear Forum members,
I have a question I could not find any solution for. I have a vector, let's say
U=[2,2,5,7,3,4,4,4,2,2,2,3].
I also have a sequence, which is
s=[2,2,3].
I now want to find all the indexes in U, where my sequence s could be built from. In my case, that would be
(1,2,5), (9,10,12), (10,11,12), (9,11,12). So the problem is the sequences have to be build first from U and do not exist as in s. I find this quite tough and would be happy if someone had a solution.
I have Matlab 7.13.
Thanks a lot! Peter
  댓글 수: 2
Azzi Abdelmalek
Azzi Abdelmalek 2013년 2월 27일
편집: Azzi Abdelmalek 2013년 2월 27일
Are you looking for all the sequences?, for example (2,5,7,3)
Peter
Peter 2013년 2월 28일
Hello Azzi!
I do not really understand what you mean with (2,5,7,3). Maybe my example was a bit confusing! I search for all values in U that could be used to build s, but only in chronological order, so I realized I forgot some in my example. U(1,1,12) would also correspond to s, or U(2,9,12), U(1,2,5) etc.
At the end of the day, I want to find the values (2,2,3) in U that are closest together, so in my example I would search for U(10,11,12). But: it can happen in my real data that the values of s are only in U with interruptions, otherwise it would be a simple task. My plan was to to first find all possible triples in U that could be used to build s and then find out via their indexes which triple is closest together.
Is this clearer now?
Kind regards and many thanks, Peter

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

답변 (4개)

Babak
Babak 2013년 2월 27일

Peter
Peter 2013년 2월 28일
편집: Peter 2013년 2월 28일
I think I could come up with a solution myself
x=[2,2,5,7,3,4,4,4,2,2,2,3]'; y=[2,2,3]';
p=0; s=0; t=0;
for i=1:length(x);
for t=1+s:length(x); % here the code goes down one line
if p<length(y);
if x(t,1)==y(p+1,1);
codes(p+1,s+1)=t;
p=p+1;
end;
end;
end;
s=s+1;
p=0;
end;
codes=codes';
codes=unique(codes,'rows');
k=find(sum(codes==0,2)>0);
codes(k,:)=[]; % incomplete triples from end of the code are removed
codes=codes';
The code goes through all records in U (here called x) and looks up s (here called y). The final matrix in codes contains all indices in x from which y can be built from.
  댓글 수: 1
Babak
Babak 2013년 2월 28일
Nice solution. I rather let "codes" be a cell object with option of having empty cells. Then you can support finding zero elements in y and your
k=find(sum(codes==0,2)>0);
line wouldn't fail for length(y)>3.

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


Saeid Abrari
Saeid Abrari 2020년 10월 6일
for dig=1:16
ndata = length(Frame);
ndata_1=length(digit(dig,:));
n_diff=abs(ndata-ndata_1);
Sound_1=[digit(dig,:)';zeros(n_diff,1)];
sx = sum(Frame.^2);
sy = sum(Sound_1.^2);
maxlag = ndata-1;
cnt = 0;
for lag = -maxlag:maxlag
cnt = cnt + 1;
sxy = 0;
for i=1:ndata
j = i + lag;
if j>0 && j<=ndata
sxy = sxy + Frame(i) * SoundVec_1(j);
end
end
cc(cnt) = sxy / sqrt(sx*sy); % correlation coefficient
ck(cnt) = sxy; % cross-correlation value
lags(cnt) = lag;
end
simil(dig)=max(cc);
[~,i] = max(cc);
Ts=1/Fs;
t1=Ts:Ts:FrameLen*Ts;
norm_ck=cc/max(cc);
lx = (length(norm_ck));
half = ceil(lx/2);
norm_ck_p=norm_ck(1:half);
td = i - ndata;
tau1=lags/Fs;

Saeid Abrari
Saeid Abrari 2020년 10월 6일
for dig=1:12
ndata = length(Frame);
ndata_1=length(digit(dig,:));
n_diff=abs(ndata-ndata_1);
Sound_1=[digit(dig,:)';zeros(n_diff,1)];
sx = sum(Frame.^2);
sy = sum(Sound_1.^2);
maxlag = ndata-1;
cnt = 0;
for lag = -maxlag:maxlag
cnt = cnt + 1;
sxy = 0;
for i=1:ndata
j = i + lag;
if j>0 && j<=ndata
sxy = sxy + Frame(i) * SoundVec_1(j);
end
end
cc(cnt) = sxy / sqrt(sx*sy); % correlation coefficient
ck(cnt) = sxy; % cross-correlation value
lags(cnt) = lag;
end
simil(dig)=max(cc);
[~,i] = max(cc);
Ts=1/Fs;
t1=Ts:Ts:FrameLen*Ts;
norm_ck=cc/max(cc);
lx = (length(norm_ck));
half = ceil(lx/2);
norm_ck_p=norm_ck(1:half);
td = i - ndata;
tau1=lags/Fs;
%Find the maximum corellation index(digit)
if(max(simil)>0.5)
[seqm sequ(s_loc)]=max(simil);
s_loc=s_loc+1;
end

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by