我有一个整数数组,我想分割这个数组,其中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)
这些数字是非零数字的开始和结束的索引.
>> 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)