MATLAB Answers

Count conservative occurrences of zeros and if zero appeared for defined number of times it should be changed.

2 views (last 30 days)
Hello,
There is an array A size (NxM), each column represents when a signal was created. I need to close that signal if certain time it was not created again and assign -1 value. For example like this:
1 0 1 0 1
0 1 0 1 0
0 0 1 0 0
1 0 0 1 1
0 0 1 1 0
0 1 0 0 0
I need to count consecutive occurrences of zero column-vise, and if zero occurred for defined number of times for example two, it should be changed to -1 and output should look like this:
1 0 1 0 1
0 1 0 1 0
-1 0 1 0 -1
1 -1 0 1 1
0 0 1 1 0
-1 1 0 0 -1
Count conservative occurrences of zeros and if zero appeared for defined number of times it should be changed.

  1 Comment

Jan
Jan on 8 Jul 2018
I assume you mean "consecutive" instead of "conservative". What is the wanted output for:
x1 = [0; 0; 1]
x2 = [1; 0; 0; 0; 0]

Sign in to comment.

Accepted Answer

Jan
Jan on 8 Jul 2018
Edited: Jan on 8 Jul 2018
If you want to replace the 2nd element after a 1 by -1, if it was a 0 before:
A = double(rand(10, 5) < 0.3); % Some test data
n = 2;
pattern = [1, zeros(1, n)];
for k = 1:size(A, 2)
index = strfind(A(:, k).', pattern);
A(index + n, k) = -1;
end

  7 Comments

Show 4 older comments
Mantas Vaitonis
Mantas Vaitonis on 8 Jul 2018
@Jan Thank You for your time and effort. Your guess was right I want [1;0;0;0;0] to get output like this [1;0;-1;0;0]. Yes now Your solution is even faster. If I may ask one more question, due to the fact that I am using GPU and not that advanced on MEX. How to change the code to work with gpuArray?
Jan
Jan on 9 Jul 2018
@Mantas Vaitonis: strfind is not implemented for GPUs. If you have a C compiler installed, I'd suggest to try the MEX function. Which OS do you use? Can you work with UINT8 instead of DOUBLEs?
Mantas Vaitonis
Mantas Vaitonis on 9 Jul 2018
@Jan, I am using WIN 10 64BIT, yes it would be possible to use UNIT8 instead of double, becasue this varibale valeus are 1, 0 or -1.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by