logical ops’ on arrays when we need to compare arrays, find a number within an array, isolate all...
TRANSCRIPT
Logical Ops’ on Arrays
When we need to compare arrays, find a number within an array, isolate all invalid numbers…1. Logical Operators
2. Logical Operations
3. 4 Examples: numbers and letters11
General Idea Applied to arrays, this solves problems such as…
Find where the positives are positioned Count the number of negatives Delete the negatives, or maybe replace them by zeros Replace letters by other letters
In Matlab, these can easily be solved in 1 or 2 lines, without the use of any loop and if statement (necessary in Java, C, C++..)
This is very useful in engineering, as tables of data always have to be filtered before use!
Note this is UNIQUE to MATLAB. No other software out there does this, so learn your loops and if statements anyway….
2
General Idea
Suppose an array of values (vector or matrix) exists. The values came from sensors on a rocket, on a robot, on a car, etc...
1. How many sensors gave negative values? 3
2. Which sensors returned negative values? #1 #5 #288
3. What were the actual negative values? 2003.2 100.2 552.45
3
General Idea
Suppose a document with letters, words and sentences. (An array of letters).
1. How many capital letters are there?
2. Extract the capital letters, keep them in order.
3. At what positions are the capital letters located?
4. Encrypt the document by changing all a’s to z’s?
4
General Idea Recall the relational and logical operators
(> >= < <= ~= == && ||)
Logical Operations return a: 1 when the condition is evaluated to be true 0 when the condition is evaluated to be false
2>5 is false, and evaluates to 02==4 is false, and evaluates to 06>=0 is true, and evaluates to 1
X=4 %X is a scalar0<=X && mod(X,2)==0 %positive and even
is ______, and evaluates to __5
General Idea Recall the relational and logical operators
(> >= < <= ~= == && ||)
Logical Operations return a: 1 when the condition is evaluated to be true 0 when the condition is evaluated to be false
X= [ ... ]; %X is a not a scalar0<=X & mod(X,2)==0 %positive and even
6
In this chapter on arrays, only type 1 symbol: &, or |
Logical Operations
1. How many sensors gave negative values?
What operation can be done to count the number of negatives? ________
7
Matlab evaluates the condition on each element.Prints a 1 when true, a zero when false.
Logical Operations, cont.
8
Simply use the built-in function.
1. How many sensors gave negative values?
Logical Operations, cont.
9
negatives is a logical-vector.
negatives is also called a ‘mask’.
1. How many sensors gave negative values?
Logical Operations
10
How do we keep going to getting the actual sensor numbers: #1 and #4?
2. Which sensors returned negative values?
Logical Operations, cont.
Matlab offers a built-in function that finds the index of values that make a condition true. In other word here, “find where the sensor-values are negatives”.
11
whereNegatives is a regular numerical-vector.
Logical Operations
12
3. What were the actual negative values? What are the actual values located at positions 1 and 4?
Logical Operations
13
3 methods possible:1. Use the logical vector negatives of 0’s and 1’s.
2. Use the numerical vector whereNegatives of indices.
sensor is the vector that has the values. It makes sense it comes first, since we are accessing those values.
Logical Operations
14
3 methods possible:3. Use the condition (bypass previous variables)
All these are logical operations. Logic (true/false) is used to find values.
Quick Summary
To get a logical vector: (0’s and 1’s)
result1 = x>=0; %var =condition;result = 0 1 0 1 0 0 0 1
To get the actual positions:
result2 = find(x>=0); %var =find(condition);result = 2 4 8
To get the actual values:
result = x(result1) ; %use the logical vector
result = x(result2) ; %use the actual positions
result = x(x>=0) ; %use the conditionresult = 34.2 55.5 9.9
15
Let’s see examples…
Ex1 – Filtering Data
Wind tunnels are commonly used to measure pressure changes, velocities changes, etc… Some use powerful electronic sensors, some use HD cameras and dyes in the air, others (like ERAU lab) use manometer tubes.
16
www.allamericanracers.com
http://ceit.uq.edu.au
www.trucktrend.com
AIRFLOW
Static Fluid Equation: ΔP = ρgh±h
Ex1 – Filtering the tubes
% assume a vector of manometer reading% h difference in millimeters: -500<values<500ManoReadings = rand(1,20)*1000-500; % indicate which tubes may not have not-worked, and% should be looked at (+/- 50 millimeter change)shouldBeFixed = find(-50<=ManoReadings & ManoReadings<=50);if length(shouldBeFixed) ~=0 %if at least 1 was bad disp('These tube numbers did not change much:') disp(shouldBeFixed) disp('Their values were:') disp(ManoReadings(shouldBeFixed)) end % calculate difference in pressure at each point…
17
Ex1 - Output
18
Logical operation: find()
Logical operation: variableName(positions)
Ex1 – Complete the software…
% assume a vector of manometer reading% h difference in millimeters: -500<values<500ManoReadings = rand(1,20)*1000-500; % indicate which tubes may not have not-worked, and% should be looked at (+/- 50 millimeter change)shouldBeFixed = find(-50<=ManoReadings & ManoReadings<=50);if length(shouldBeFixed) ~=0 %if at least 1 was bad disp('These tube numbers did not change much:') disp(shouldBeFixed) disp('Their values were:') disp(ManoReadings(shouldBeFixed)) end % calculate difference in pressure at each point…
19
Replace by readings from machine!
Ex2 – Sum all the positive evens
%Suppose a vector x of whole values%evaluate where “numbers is even” is truewhereTrue = (mod(x,2)==0 & x>=0); %sum when trueresult = sum(x(whereTrue));
OR
%Suppose a vector x of whole values%find the POSITIONS of the positive even numberspositions = find(mod(x,2)==0 & x>=0);%in x, sum the numbers at these positionsresult = sum(x(positions));
20
Use only 1 symbol for AND and OR.
Ex2 – Sum all the positive evens
OR
%Suppose a vector x of whole values%sum the positive, even numbers of xresult = sum(x(mod(x,2)==0 & x>=0));
21
Use only 1 symbol for AND and OR.
Ex3 – How about matrices?
22
Part Number UnitPrice ($)
101 3.25
65 20.50
290 56.00
450 1.75
The client orders 100 pieces of part number 65. How much is his total bill, with a tax of 6.5%? The part number and quantity can change, hard-coding is not an option!
Ex3 – Analyze table, cont.
%ask user for part number, and quantitypart_number = input(‘Enter part number: ’);quantity = input(‘Enter quantity: ’);
%find the row of that part number[row, col] = find(table == part_number);
%in table, get the actual unit priceunit_price = table(row,2);
%calculate sub-totalsub_total = quantity * unit_price;
%add in taxestotal_bill = sub_total * (1+0.65);fprintf(‘Your bill adds up to: $%20.2f\n’, total_bill) 23
>> [row, col] = find(table == part_number)row = 2col = 1
Ex3 – Analyze table, cont.
Note that this would not go well if the part_number’s value is actually also one of the unit price!
%find the row of that part number, column1 ONLYrow = find(table == part_number); 24
>> [row, col] = find(table == part_number)row = 2 3
col = 1 2
Part Number UnitPrice ($)
101 3.25
65 20.50
290 65.00
450 1.75
That’s SLICING again!
(:,1)
Ex4 – Works for strings too!
25
Simulate DNA with a string GATACCAT…
The problem is: Generate the matching DNA string! A-T T-A C-G G-C
Source: http://www.scq.ubc.ca
Ex4 – Works for strings too!
26
Using a loop, and an if statement
originalDNA =‘GATACCAT’;matchDNA = []; %empty container for the matching DNA
%loop for each letterfor ctr = 1:length(originalDNA)
if originalDNA(ctr) == ‘T’ %Where it is a ‘T’, make the ‘A’matchDNA(ctr)=‘A’;
elseif originalDNA(ctr) == ‘A’ matchDNA(ctr)=‘T’;
elseif originalDNA(ctr) == ‘C’matchDNA(ctr)=‘G’;
elseif originalDNA(ctr) == ‘G’matchDNA(ctr)=‘C’;
endend
length() is used to count the number of elements in a vector, here: number of characters
Ex4 – Works for strings too!
27
originalDNA =GATACCAT
matchDNA = A A
matchDNA = TAT TA
matchDNA =CTAT TA
matchDNA =CTATGGTA
Or.. In 5 lines!
originalDNA =‘GATACCAT’
%at the T's location, put an ‘A’matchDNA(originalDNA =='T')='A'
%at the A’s location, put a TmatchDNA(originalDNA =='A')='T‘
%at the G’s location, put a CmatchDNA(originalDNA =='G')='C‘
%at the C’s location, put a GmatchDNA(originalDNA =='C')='G'
One last keyword end
It represents automatically the index of the last element in a vector
28
Wrapping Up The OR and AND operators are slightly updated to 1 symbol What does it mean: To “evaluate” True evaluates to 1 False evaluates to 0 Logical vectors are vectors of 0’s and 1’s. find(condition) returns a numerical vector of positions where
the condition is true. 3 methods to access (to refer to) the actual elements It works with letters too. (encryption) The keyword end (nothing to do with the if/switch/for/while) refers to
the last element in the array. (note it will be black, not blue!)
29