在MATLAB中拆分数组

Jav*_*efi 9 matlab split

我有一个整数数组,我想分割这个数组,其中0来自一个函数,给我分裂点.

示例:数组:0 0 0 1 2 4 5 6 6 0 0 0 0 0 22 4 5 6 6 0 0 0 4 4 0

该函数必须返回这些数字:

[ 3 10 ;14 20 ;22 25 ]
Run Code Online (Sandbox Code Playgroud)

这些数字是非零数字的开始和结束的索引.

gno*_*ice 5

这是一个使用函数DIFFFIND的简单矢量化解决方案:

>> array = [0 0 0 1 2 4 5 6 6 0 0 0 0 0 22 4 5 6 6 0 0 0 4 4 0];  %# Sample array
>> edgeArray = diff([0; (array(:) ~= 0); 0]);
>> indices = [find(edgeArray > 0)-1 find(edgeArray < 0)]

indices =

     3    10
    14    20
    22    25
Run Code Online (Sandbox Code Playgroud)

上面的代码首先创建一个列数组,其中一个列表示非零元素,用零填充此数组(如果任何非零跨度延伸到数组边缘),并采用元素差异.这给出了一个向量edgeArray,1指示非零跨度的开始并-1指示非零跨度的结束.然后函数FIND用于获取开始和结束的索引.

一方注意/挑剔:这些不是你所说的非零跨度的起点和终点的指数.从技术上讲,它们就是在开始之前和非零跨度结束之后的指数.您可能实际上想要以下内容:

>> indices = [find(edgeArray > 0) find(edgeArray < 0)-1]

indices =

     4     9
    15    19
    23    24
Run Code Online (Sandbox Code Playgroud)