首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab:如何找到范围?

Matlab:如何找到范围?
EN

Stack Overflow用户
提问于 2013-09-20 05:13:37
回答 2查看 259关注 0票数 1

我有一个1s和0的二进制向量。我想找一个数字1的函数范围/岛。例如:X=00011110011111000110.我需要一个这样的答案: 4-7 (或45-67),10-16,20-21 .谢谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-20 06:10:59

Aki解决方案的变体(测试不多):

代码语言:javascript
复制
x = [0 0 0 1 1 1 1 0 0 1 1 1 1 1 1 1 0 0 0 1 1 0];
dx = diff([0, x, 0]);
start_pos = find(dx == 1);
end_pos = find(dx == -1) - 1;
票数 1
EN

Stack Overflow用户

发布于 2013-09-20 05:35:36

向原始数组的两端添加零可以保证转换的偶数(从0开始到1开始,结尾从1到0)。这基本上是一个diff和细化输出的问题。

代码语言:javascript
复制
x = [0 0 0 1 1 1 1 0 0 1 1 1 1 1 1 1 0 0 0 1 1 0];
% how to make that out from a string  xx="0001111001111111000110" is left
% as an exercise
y = [0 x 0];        %  make sure x="11"; has proper amount of transitions
R = 1:length(y)-1;  %  make an array of indices [1 2 3 4 5 ... end-1]
F = R(y(2:end) != y(1:end-1));          % finds the positions [4,8,10,17,20,22]
start_pos = F(1:2:end-1);  % gets 4,10,20
end_pos = F(2:2:end)-1;    % gets 7,16,21 adjusted

免责声明:未经测试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18909268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档