Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 特定列[删除元素直到最后一个零元素,然后从第一个零元素到最后一个零元素]_Matlab_Matrix - Fatal编程技术网

Matlab 特定列[删除元素直到最后一个零元素,然后从第一个零元素到最后一个零元素]

Matlab 特定列[删除元素直到最后一个零元素,然后从第一个零元素到最后一个零元素],matlab,matrix,Matlab,Matrix,这是一个非常具体的问题。我有一个M*3矩阵。第一列包含M个元素集。可能是这样 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 我感兴趣的只是1s和相应的其他列值。我可以去掉零,只需要1就可以得到一组新的矩阵,但有时可能会这样: 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 当情况如上所述时,我想在开始时忽略1s,删除M*3矩阵中的所有元素,直到第一个1,然后当它达到列中第二个零的开始时,它可以删除列末尾的所有值。(

这是一个非常具体的问题。我有一个M*3矩阵。第一列包含M个元素集。可能是这样

0
0
0
0
1
1
1
1
1
1
1
1
1
0
0
0
0
0
我感兴趣的只是1s和相应的其他列值。我可以去掉零,只需要1就可以得到一组新的矩阵,但有时可能会这样:

1
1
1
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
1
1
当情况如上所述时,我想在开始时忽略1s,删除M*3矩阵中的所有元素,直到第一个1,然后当它达到列中第二个零的开始时,它可以删除列末尾的所有值。(因此它将是13*3矩阵)

我在matlab中做这个。
谢谢:)

我们把你的矩阵称为A:

firstCol = A(:, 1);

indices = find(firstCol);
check = find(diff(indices) ~= 1);

if (isempty(check) )
    Afinal = A(indices, :);
else
    indices2 = indices(check(1)+1:1:check(2));
    Afinal = A(indices2, :);
end

最终结果应该是您正在寻找的输出。

它正在工作,但您能解释一下它是如何工作的吗?谢谢:)第一行提取第一列。第二行获取一个数组,该数组包含第一列中每个条目的索引,即1。第三行获取索引中连续值之间的差值,并查找所有不相差1的索引(换句话说,以零分隔的1的索引)。如果check为空,则表示我们有您列出的第一个案例,我们只需提取所需的行。否则,检查中的第一个和第二个值将指示围绕最中间运行的1的索引。这适用于您列出的情况。我在某些情况下遇到此错误:尝试访问检查(2);索引超出范围,因为numel(检查)=1。abc2(第162行)中的错误指示2=指示(检查(1)+1:1:检查(2));我也有这样的情况,列可能看起来如下:0、0、0、1、1、1、0、0、0、1、1、1、1、1、i、i总是想考虑1s的中间部分。感谢您的帮助。。。谢谢……)我沿着直线观察二进制值,以确定直线的大小。