如何在MATLAB中找出两个不同向量中的连续数字序列?

时间:2019-11-11 18:45:37

标签: arrays matlab vector pattern-matching

假设一个向量是x = [-2 -2 -1 -1 -1 -1 -2 -1 0 5 -1 0 5 -1 0],其他向量为y = [2 3 4 5 -1 0 5 -1 0 5 -1]。两个向量不必具有相同的长度。我想使用MATLAB查找两个向量中最长连续数字的相似序列/模式吗?结果应该是两个向量中匹配模式的开始和结束索引。对于此示例:ix = [7 12]和iy = [5 10]。

1 个答案:

答案 0 :(得分:2)

这需要图像处理工具箱和统计工具箱。它在块大小上使用循环:

x = [-2 -2 -1 -1 -1 -2 -1 0 5 -1 0 5 -1 0];
y = [ 2 3 4 5 -1 0 5 -1 0 5 -1];
for n = min(numel(x), numel(y)):-1:1; % try sizes in decreasing order
    x_sliding = reshape(im2col(x,[1 n],'sliding'),n,[]).'; % reshape needed for n=1
    y_sliding = reshape(im2col(y,[1 n],'sliding'),n,[]).'; % reshape needed for n=1
    [ind_x, ind_y] = find(pdist2(x_sliding, y_sliding) == 0);
    if ~isempty(ind_x)
        ix_start = ind_x;
        iy_start = ind_y;
        ix_end = ind_x+n-1;
        iy_end = ind_y+n-1;
        break
    end
end

如果存在解决方案,则在ix_startix_endiy_startiy_end中给出。如果存在多个可能的最大大小的解决方案,则会生成所有解决方案的索引。