Search for a number pattern in an array
11 次查看(过去 30 天)
显示 更早的评论
Without using strfind is there a way to search for a pattern of less than 4 ones in a row? and if there are can i set them all to zero and track which set of 1s it is and record in another array. Example below, 'a' being original data, 'b' is the updated data, 'newArr' nth set of any amount of 1's that was replaced with zeros. Let me know if i need to further clarify. thanks!
if true
a = [0 0 0 1 1 1 1 0 0 0 1 1 0 0 0 1 1 1 1 0 0 1 0 0 1 1 1 0]
BECOMES
b = [0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0]
newArr = [2 4 5]
end
2 个评论
Guillaume
2017-11-13
There are certainly many ways of doing it without strfind but what is the objection to using strfind if it fits the bill?
采纳的回答
the cyclist
2017-11-13
Then the steps you'll need to take are
- Identify the 1's in the first output
- See if the run length is less than 4 using the second output
- Calculate the indices you need using the third output
2 个评论
Jan
2017-11-13
编辑:Jan
2017-11-13
Explicitly:
a = [0 0 0 1 1 1 1 0 0 0 1 1 0 0 0 1 1 1 1 0 0 1 0 0 1 1 1 0];
[v, n] = RunLength(a);
isOne = (v == 1); % Location of ones
remove = isOne & (n < 4); % Less then 4 elements in a run
v(remove) = 0; % Set them to 0 in the output
b = RunLength(v, n)
posOne = cumsum(isOne); % The n.th run of ones
index = posOne(remove) % Select the removed runs only
@cyclist: It is surprising how often RunLength can solve problems in the forum. I have written it only for this purpose and did not use it ever for any of my own programming problems.
更多回答(1 个)
Jan
2017-11-13
"Without using strfind"?! Why? Is this a homework? Then RunLength from the FileExchange might not be usable also. Then look in the code of RunLength_M to create your own efficient vectorized Run-Length method.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Cell Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!