arrays - 如何在MATLAB中找出两个不同向量中的连续数字序列?
问题描述
假设一个向量是 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]。这两个向量不必具有相同的长度。我想使用 MATLAB 找出两个向量中最长连续数的相似序列/模式?结果应该是两个向量中匹配模式的开始和结束索引。对于此示例:ix=[7 12] 和 iy=[5 10]。
解决方案
这需要图像处理工具箱和统计工具箱。它使用块大小的循环:
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_start
, ix_end
, iy_start
,中给出iy_end
。如果存在最大可能大小的多个解,则生成所有解的索引。
推荐阅读
- celery - 没有后端的气流中的芹菜执行器
- model-view-controller - MVC 中的模型需要是一个类还是只是一个常见的模式?
- ssl - 将自签名证书添加到 Netsuite https 模块以访问第三方 Web 服务
- sql - SQL Server Compact 数据库 PC 与移动设备中的结果集差异
- office-js - 使用 Office.onReady() 会破坏 Outlook 2013 加载项
- python - 根据 Count 和 * of days 循环删除行
- android - 资源字符串中的换行不起作用
- nginx - 如何将所有请求从 nginx 转发到 .net 核心应用程序
- php - 上传后未找到基表或视图,但使用 localhost
- sql-server - 在没有 ETL 工具的情况下跨 SQL Server 实例增量移动数据