Finding small vector in big vector

Hey everybody,
I am desperately looking for a function that can find a small vector inside a big vector. Ismember and interesect just wouldn't do it right :(
Let's say I have the two vectors x = [ 7 6 9 7 4 3 7 9 0 7 4 3 2 6 7 0 7 5 ]; y = [ 4 3 2 6 ]
As a result I would like to have ans = [ 11 12 13 14 ]
so only the coordinates of where the values are in the correct sequence. Is there anything that can do that?
Thanks in advance!

 采纳的回答

Try this:
x = [ 7 6 9 7 4 3 7 9 0 7 4 3 2 6 7 0 7 5 ];
y = [ 4 3 2 6 ];
% As a result I would like to have ans = [ 11 12 13 14 ]
out = strfind(x, y) + [0:length(y)-1]

2 个评论

Wohoo awesome. Thank you guys so much! That just works perfectly. Actually the strfind itself is just what I need, but the idea of "+[0 : length(y)-1] " is quite needed as well.
You're welcome. strfind(x, y) finds only 11 - the start of the sequence - while adding that other vector gives you [11,12,13,14] which is what you said you wanted.

请先登录,再进行评论。

更多回答(2 个)

James Tursa
James Tursa 2015-10-20
编辑:James Tursa 2015-10-20
I am not on a machine with MATLAB at the moment to test this, but maybe try the strfind(x,y) function to see if it works with doubles (even though the doc doesn't indicate that it does).

3 个评论

It does. The numbers are internally casted to char. For compatibility with other programs you can use strfind(char(x),char(y)).
@Alexander Paul "The numbers are internally casted to char."
I don't think so, if it was, the result of the two last commands would be indentiical
d = double('a')+0.1;
a = 'a';
strfind(d,a)
ans = []
strfind(char(d),char(a))
ans = 1
You are right. I checked it only with uint8.

请先登录,再进行评论。

Matlab Pro
Matlab Pro 2024-5-12
Hi
A small improvement where the sub-vector is found more than once...
x = x(:)'; % Make sure data is a Row vector
ix = strfind(x, y);
if length(ix)>1 % Fix cases where y is found more than once
idx = [1:length(y)] + ix(1)-1; % Indexes of 1st occurance
else
idx = strfind(x, y) + [0:length(y)-1];
end

类别

帮助中心File Exchange 中查找有关 Logical 的更多信息

标签

尚未输入任何标签。

Community Treasure Hunt

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

Start Hunting!

Translated by