在集群矩阵非零元素连接列表开始本

8视图(30天)
我使用了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
这个问题比一个坚实的理由,一个迷宫问题简单时,另一个原因,最终导致问题试图优化性能。
  1. 发现本,该算法不需要对减少行向后看。它只有看左和右列,和前方的三排总共5可能的搜索。(对角线连接可能发生)。
  2. 趋势是建立(即一次。、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):
  1. 检查左、右关口在第二行,即。(2、4)和(6)和马克发现如果非零。
  2. 检查关口向前(3、4),(3、5)和(6)和马克发现如果非零。
注意,两个趋势线将足够远,以免担心冲突。
然后每本标记,重复左/右/向前搜索。我希望使用MATLAB函数来处理这些搜索没有这么多好循环粒度来提高性能。
创建供参考——直方图的序列数据,y (n)。使用上面的方法,y (n)的垃圾箱中选定的生产趋势线。
下面是我的MATLAB 2019 b配置。(我上个月递交了一份愿望清单附加工具箱)。
  • 通信工具箱
  • DSP系统工具箱
  • 仪器控制工具箱
  • LTE工具箱
  • MATLAB编译器
  • 并行计算工具箱
  • 射频工具箱
  • 信号处理工具箱
  • 符号数学工具箱
谢谢你提前,
保罗

接受的答案

保罗Hoffrichter
保罗Hoffrichter 2020年5月12日
我的蛮力的方法处理所有的边界情况。
我只是一个发现本在递归调用的时间。
我希望我的左边。
我看我的。
我期待着我的左边。
我期待着正前方。
我期待着我的右边。

更多的答案(0)

下载188bet金宝搏


释放

R2019b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!