Converting values to 0 and 1 and then counting occurrences!

62 views (last 30 days)
Hello, I am stuck with a problem.
I have a 200x1 matrix containing values ranging from 0 to 30.
Now I want to convert the values which are less than 20 to zero and values greater than zero to 1.
After doing that I want to count how many occurrences are there when 1 is followed by zero and give the counting as an output!
  1 Comment
adi kul
adi kul on 26 May 2015
More information:
I am having 5 .mat files. Each mat file contains 5 parameters. A,B,C,D,E. The 5 files are named Trial1.mat, ....., Trial5.mat
I want to take B variable which is of a size 200x1 from each mat file, convert values less than 20 to 0 and greater than 20 to 1.
0 shows system is OFF 1 Shows system is ON
Now I want to check how many times 1 is followed by 0.
I want to count this occurrence for each .mat file and give an output file which will give number of count per mat file.
Here is the for loop available to put the code:
myFolder = 'C:\Users\adi\Documents\MATLAB\';
if ~isdir(myFolder)
errorMessage = sprintf('Error: The following folder does not exist:\n%s', myFolder);
uiwait(warndlg(errorMessage));
return;
end
filePattern = fullfile(myFolder, '*.mat');
matFiles = dir(filePattern);
for k = 1:length(matFiles)
end
I hope now you got my question!

Sign in to comment.

Accepted Answer

Thorsten
Thorsten on 26 May 2015
A(A<20) = 0;
A(A>0) = 1;
cnt = sum(diff(A) == -1);
  6 Comments
adi kul
adi kul on 27 May 2015
This helped but can we count only change??
I mean instead of 0 followed by 1 there are some 1 followed by zero at the end which are not being counted. So what to do to count total 0 to1 and 1 to 0 changes???

Sign in to comment.

More Answers (3)

Sebastian Castro
Sebastian Castro on 26 May 2015
Edited: Sebastian Castro on 26 May 2015
Suppose your original data is named x. The following line will create a matrix the same size as your original, where the elements are 1 if the logical condition is met and 0 otherwise:
xThresh = x>=20
Then, you can use the diff function to get the difference between consecutive elements. You know that a transition from 1 to 0 is a difference of -1, so you can find all the -1s and add them up:
xDiff = diff(xThresh)
numTransitions = sum(xDiff==-1)
- Sebastian
  2 Comments
adi kul
adi kul on 27 May 2015
I tried this. But problem is, when there is not "B" column available, it still gives me some value!!

Sign in to comment.


Andrei Bobrov
Andrei Bobrov on 26 May 2015
Edited: Andrei Bobrov on 27 May 2015
out = numel(strfind(A(:)' >= 20,[1, 0]));

Ingrid
Ingrid on 26 May 2015
is this what you mean as it is not clear to what end you would like to do this
x(x<20) = 0;
x(x>=20) = 1;
temp = diff(x);
answer = sum(temp == -1);

Community Treasure Hunt

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

Start Hunting!