我使用了MATLAB的histcounts2来创建一个10行7坳矩阵,h .我想创建一组非零箱,直接或间接地相互连接。这里是一个例子,我陷入困境:
H = [
1 0 0 1 1 0 0
1 0 0 0 1 0 0
1 0 0 1 1 0 0
1 0 0 1 0 0 0
0 0 1 1 0 0 0
0 1 0 1 0 0 1
0 1 0 0 0 0 1
0 1 0 0 0 1 1
0 1 0 0 1 0 0
0 1 0 1 1 0 0
];
在第一行中,算法
找到
的第一个非零坐标(1,1),然后
找到
列1连接的:即。{(1),(3,1)(4,1)}。这组被丢弃的太小了。然后,在同一行,它
找到
的下一个非零本(1,4)。预期的结果是以下14连接本坐标:
1 - 4
1 - 5
2个5
3 4
3个5
4个4
5个3
5个4
6 - 2
6 4
7 - 2
8 - 2
9 - 2
10 2
这个问题比一个坚实的理由,一个迷宫问题简单时,另一个原因,最终导致问题试图优化性能。
- 发现本,该算法不需要对减少行向后看。它只有看左和右列,和前方的三排总共5可能的搜索。(对角线连接可能发生)。
- 趋势是建立(即一次。、pos、否定或零斜率),那么斜率不会逆转。例如,上面的例子显示了一个负斜率的趋势。即使(8,3)有一个1由于一些噪音,我们不可能(8,4),因为那么多噪音过滤掉。同时,另外两个集群显示也会有相同的斜率。
100的情况下,大多数结果是一套好的箱连接。例如,如果本(1、4)更改为0,然后开始本是(5、1)。的
找到
下坳5 1(即的程度。3箱)。然后确定趋势,算法做了
找到
在关口1 - 4 4和6行。因为它发现了一个1(3、4),结论是,斜率是负的,和我在负斜率完成跟踪跟踪功能。但是(1、4)值算法声明一个斜率为正。我固定,然后其他矩阵显示额外的问题。我看到一些好的使用MATLAB的内置函数来避免循环。所以我希望得到一些帮助在使用良好的功能来简化代码,加快这一进程。
蛮的解决方案将会忽略斜率的趋势。对于一个给定的非零本,(2、5):
- 检查左、右关口在第二行,即。(2、4)和(6)和马克发现如果非零。
- 检查关口向前(3、4),(3、5)和(6)和马克发现如果非零。
注意,两个趋势线将足够远,以免担心冲突。
然后每本标记,重复左/右/向前搜索。我希望使用MATLAB函数来处理这些搜索没有这么多好循环粒度来提高性能。
创建供参考——直方图的序列数据,y (n)。使用上面的方法,y (n)的垃圾箱中选定的生产趋势线。
下面是我的MATLAB 2019 b配置。(我上个月递交了一份愿望清单附加工具箱)。
- 通信工具箱
- DSP系统工具箱
- 仪器控制工具箱
- LTE工具箱
- MATLAB编译器
- 并行计算工具箱
- 射频工具箱
- 信号处理工具箱
- 符号数学工具箱
谢谢你提前,
保罗