MATLAB-如何计算向量中的0和1

use*_*893 3 matlab

设一个v长度n为a的向量,v = randi([0 1],1,n)随机包含0或1.

获取向量表示每个0段或1段中有多少0或1的有效方法是什么?

例:

v = [1 0 0 0 1 1 0 0 1]   ----> 
    counts = [0 1 3 2 2 1]  (*0* zero, *1* one, *3* zeros, ....)

v = [0 0 1 0 0 0]   ---->
    counts = [2 1 3]
Run Code Online (Sandbox Code Playgroud)

PS总是首先计数0,如果向量以1开始,则结果向量的第一个条目,即计数(1),应为0.

Den*_*din 5

这是一种相当简单的方法:

diff(find(diff([inf v inf])))
Run Code Online (Sandbox Code Playgroud)

如果您还想知道哪个值对应于每个段,那么扩展应该不难.

  • 在输入向量之前使用`inf`并不能确保在没有零的情况下始终首先计算零.你的解决方案给出了`[1 3 2 2 1]`,其中OP想要`[0 1 3 2 2 1]`.你需要将它改为`diff([1 find([0(inf)))]`. (4认同)