Matlab 如何计算矩阵中1和0的个数?
我有一个图像,我只剪下一列。在此之后,我使其符合逻辑,因此此列中只有0和1 假设此列中的值为Matlab 如何计算矩阵中1和0的个数?,matlab,image-processing,matrix,computer-vision,Matlab,Image Processing,Matrix,Computer Vision,我有一个图像,我只剪下一列。在此之后,我使其符合逻辑,因此此列中只有0和1 假设此列中的值为 1111000110000000000000011111111 我想计算每个1块或每个0块的长度 结果将是 1 - 4 (first 1) 0 - 3 (first 0) 1 - 2 and so on... 我知道只计算整个列,但我不能计算每个不同的块。任何人请帮帮我。让vec成为一行向量(1-by-n),然后你可以使用以下代码 rl = ( find( vec ~= [vec(2:end),
1111000110000000000000011111111
我想计算每个1块或每个0块的长度
结果将是
1 - 4 (first 1)
0 - 3 (first 0)
1 - 2
and so on...
我知道只计算整个列,但我不能计算每个不同的块。任何人请帮帮我。让
vec
成为一行向量(1-by-n
),然后你可以使用以下代码
rl = ( find( vec ~= [vec(2:end), vec(end)+1] ) );
data = vec( rl );
rl(2:end) = rl(2:end) - rl(1:end-1);
rl
将为您提供连续的0和1的数量,而data
将告诉您每个块的数量是0还是1
这个问题与我们的工作密切相关
演示:
vec = [1 1 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1];
rl = ( find( vec ~= [vec(2:end), vec(end)+1] ) );
data = vec( rl ),
rl(2:end) = rl(2:end) - rl(1:end-1),
data =
1 0 1 0 1
rl =
4 3 2 14 8
非常感谢。我已经试过了,但是我错了。是不是因为我的vec是n-by-1而不是1-by-n?错误是“使用horzcat CAT参数的错误维度不一致”。如果向量是
n
-by-1,则可以使用vec=vec简单地对其进行转置是的,这正是我想要的。但是我可以问你更多的问题吗?如果我只看rl,那么我怎么知道每个都是1或0?有什么想法吗?@BowHousedata
将为您提供所需的信息。看我的编辑和示例。哦,我明白了。非常感谢谢。顺便问一下,这个函数叫什么?我的意思是,在matlab中,我对matlab很陌生。@Shai标记与此有何关系?@EitanT-解决方案是通过矢量化而不是一个loop@Shai但问题不是矢量化本身。。。我认为这个标签应该保留给那些专门针对矢量化代码的实现的问题。如果你的答案恰好是矢量化的,这很好,但这不应该成为重新标记的原因。这里的大多数MATLAB问题的答案都可以矢量化,但这并不意味着它们都应该在这个标签下。