Title: Computer Science 121
1Computer Science 121
- Scientific Computing
- Winter 2007
- Chapter 4
- Collections and Indexing
2Collections and Indexing
- We've seen two kinds of collection
- Vector (sequence of numbers)
- Text/string (sequence of characters)
- Two main issues
- How to access individual elements of a collection
- How to group related elements together (even when
their types differ)
34.1 Indexing
- Consider census data for a single street
- gtgt elmstreet 3 5 2 0 4 5 1
- Matlab can give us various stats about this data
- gtgt sum(elmstreet) total residents
- ans 20
- gtgt mean(elmstreet) mean household size
- ans 2.8571
- gtgt max(elmstreet) largest household size
- ans 5
- gtgt min(elmstreet) smallest household size
- ans 0
44.1 Indexing
- Some data may be bogus
- gtgt min(elmstreet) smallest size
- ans 0
- Need to know bogus values, and where they live
- In general, need to know
- Value of an element
- Position (index) of the element
54.1 Indexing find
- Recall boolean operators on vectors
- gtgt elmstreet 0
- ans 0 0 0 1 0 0 0
- The find operator tells us the indices of the
non-zero elements - gtgt find(elmstreet 0)
- ans 4
- gtgt find(elmstreet gt 2)
- ans 1 2 5 6
- gtgt find(elmstreet lt 0)
- ans
64.1 Indexing First and last Elements
- First element has index 1 (unlike Java, C)
- gtgt elmstreet
- ans 3 5 2 0 4 5 1
- gtgt elmstreet(1)
- ans 3
- Last element can be referenced by special end
index - gtgt elmstreet(end)
- ans 1
74.1 Indexing Subsequences
- Can use a vector of indices instead of a single
index - gtgt elmstreet(1 3 5)
- ans 3 2 4
- gtgt elmstreet(1 3 5) -1
- elmstreet -1 5 -1 0 -1 5 1
84.1 Indexing Extending a Vector
- Use end1 to add an element at end of vector
- gtgt elmstreet
- ans 3 5 2 0 4 5 1
- gtgt elmstreet(end1) 8
- elmstreet 3 5 2 0 4 5 1 8
- If we go beyond end, Matlab fills gaps with 0's
- gtgt elmstreet(12) 9
- elmstreet 3 5 2 0 4 5 1 8 0 0 0 9
9Fibonacci Redux
- With vectors, we only need a single variable,
line (versus three) to do Fibonacci - gtgt fib 0 1
- gtgt fib(end1) fib(end) fib(end-1)
- fib 0 1 1
- gtgt fib(end1) fib(end) fib(end-1)
- fib 0 1 1 2
- gtgt fib(end1) fib(end) fib(end-1)
- fib 0 1 1 2 3
etc.
104.2 Matrices
- Lots of data are best represented as tables
114.2 Matrices
- We can store such data in a matrix
gtgt elmstreet 3 2 1 35000
5 2 3 41000 2 1 1 25000
2 2 0 56000 4 2 2 62000
5 3 2 83000 1 1 0 52000
- Household index is implicit (as row number)
124.2 Matrices
- Like length operator for vectors, size operator
reports size of matrix
gtgt size(elmstreet) ans 7 4
- With matrices, we use two indices (instead of
one) for referencing values
gtgt elmstreet(3, 4) ans 25000 gtgt elmstreet(4,
3) ans 0
134.2 Matrices
- As with vectors, can access part of matrix by
using a vector of indices
gtgt elmstreet(4 5 7, 4) ans 56000 62000 52000
- Grab a whole row using colon notation
gtgt elmstreet(1, ) whole first row ans 3 2 1
35000
144.2 Matrices
gtgt elmstreet(, 1) whole first col ans
3 5 2 2 4 5 1
154.2 Matrices
- Recall that a scalar is a length-one vector
gtgt length(7) ans 1
- A scalar is also a one-by-one matrix
gtgt size(7) ans 1 1
16- As with a vector, we can do operations on a
scalar and a matrix
gtgt 1 2 3 4 5 6 7 8 9 2 ans 2 4 6
8 10 12 14 16 18
17- ... and element-by-element on two matrices
gtgt a 1 2 3 4 5 6 7 8 9 gtgt b 1 0 1 0 0
1 1 1 0 gtgt a . b ans 1 0 3 0 0 6
7 8 0
18- Of course, matrices must be same size for .
gtgt 1 2 3 4 5 6 7 8 9 . 3 4 5 6 ??? Error
using gt times Matrix dimensions must
agree... You eediot!
19- We can get a lot of mileage by combining colon
and other operations
gtgt children elmstreet(, 3) children 1 3 1 0
2 2 0 gtgt nokidshouses find(children
0) nokidshouses 4 7 gtgt incomenokids ...
elmstreet(nokidshouses, 4) incomenokids
56000 52000 gtgt mean(incomenokids) ans
55000
20- Some matrix operations yield a vector
gtgt r,c ... find(elmstreet gt3 elmstreet
lt 5)
r 2 5 6 c 1 1 1
214.3 Mixed Data Types
- Not all data is (are?) numerical
224.3 Mixed Data Types
- We can't put text into a matrix
gtgt smiths(1,1) 'Emily' ??? Subscripted
assignment dimensions blah blah blah I hate
you!!!
- Because how do we know that next element
('George') will be same size? - Old-school solution was to enforce fixed sizes
for everything led to Y2K problem!
234.3 Mixed Data Types Structures
- Structures (a.k.a. Data Structures) allow us to
put different types of data into the same
collection
gtgt pt.x 3 pt x 3 gtgt pt.name
'Homestar' pt x 3 name Homestar
244.3 Mixed Data Types Structures
- Structure arrays contain structures with similar
contents
gtgt people(3).name 'StrongBad' gtgt people(3).IQ
80 people 1x3 struct array with fields
name IQ
254.3 Mixed Data Types Structures
- Matlab fills in missing array members with empty
structures
gtgt people(1) ans name IQ
264.3 Mixed Data Types Cell Arrays
- A cell array is a matrix that can contain any
type of data
gtgt people 'Homestar', 60 ...
'StrongBad', 80 ... 'Marzipan',
100
people 'Homestar' 60
'StrongBad' 80 'Marzipan' 100
274.3 Mixed Data Types Cell Arrays
- Cell array is referenced using curly braces ,
gtgt people1, ans Homestar ans 60
284.3 Mixed Data Types Cell Arrays
- But if we want to store output values, we use
ordinary parens
gtgt hs people1, ??? Illegal right hand side
in assignment. Too many elements. gtgt hs
people(1,)
hs 'Homestar' 60