CS 2120: Topic 9
=================
.. image:: ../img/array.png
.. This chapter on more data structures... NumPy Arrays, Matrices, floats dictionaries!
Videos for this week:
^^^^^^^^^^^^^^^^^^^^
.. raw:: html
.. raw:: html
Numpy arrays
^^^^^^^^^^^^
* Another data structure... the *array*::
>>> a=numpy.array([5,4,2])
>>> print(a)
[5 4 2]
* We can access elements of the array (like we do with a list)::
>>> print(a[0])
5
>>> print(a[1])
4
* Like lists, arrays are also *mutable*::
>>> a[1]=7
>>> print(a)
[5 7 2]
* To check the type of a numpy array's elements
>>> a.dtype
dtype('int64')
* Notice that usually we'd type this to get the type of something...
>>> type(something)
* So, here we are instead asking NumPy to give us the data type (``dtype``) *attribute* of our array
* To see all of the attributes your array has::
>>> dir(a)
* i.e. to change the type of an array's elements:
>>> b=a.astype(numpy.float32)
>>> b.view()
array([ 5., 4., 2.], dtype=float32)
* You can't technically "append" to an array, but you can create a new array with added values using ``numpy.append()``::
>>> a = numpy.array([1,2,3,4])
>>> a.view()
array([1, 2, 3, 4])
>>> b = numpy.append(a,5)
>>> a.view()
array([1, 2, 3, 4])
>>> b.view()
array([1, 2, 3, 4, 5])
* Note: ``numpy.append()`` did *not* change *a*. It created a new array, *b*.
Higher Dimensional Arrays
^^^^^^^^^^^^^^^^^^^^^^^^^
* Let's create a 2D array:
>>> a=numpy.array([[1,2,3],[4,5,6],[7,8,9]])
>>> a.view()
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
* As long as two 2D arrays have the same *shape*, you can do arithmetic on them, just like 1D arrays.
>>> a.shape
(3, 3)
* If you want an array of zeros, of shape ``(n,m)``:
>>> a=numpy.zeros([n,m])
* Also try ``numpy.ones()`` and ``numpy.eye()``
* We can slice 1D, 2D, or higher dimensional arrays::
>>> a=numpy.arange(25).reshape(5,5)
>>> a.view()
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
>>> print(a[0:2,1:4])
[[1 2 3]
[6 7 8]]
* Here, ``numpy.arange`` works like ``range`` but returns an array.
* If you use ``:`` as an index you can get an entire row or column::
>>> print(a[:,0:2])
[[ 0 1]
[ 5 6]
[10 11]
[15 16]
[20 21]]
.. admonition:: Further reading
:class: Note
There's a LOT more that NumPy can do... if you're interested, take a look at the `NumPy Quickstart Tutorial `_ for more info.
Tuples
^^^^^^^
* A tuple looks a lot like a list, but with ``()`` instead of ``[]``:
>>> tup = (3,5)
>>> print(tup)
(3, 5)
.. admonition:: What is the point of tuples?
:class: Warning
Anything you can do with tuples, you can do with lists. But...
* **tuples are immutable**
* they are more compact than lists and therefore *faster* (but you won't notice this until you have many elements)
Dictionaries
^^^^^^^^^^^^^
.. image:: ../img/dictionary.jpg
* Along with lists, arguably one of the most important Python data structures
* These are basically lists which can be indexed with *strings* instead of *numbers*.
* Another way of thinking of them --- a set of ``key-value pairs``
* Let's create an empty dictionary:
>>> mydict = {}
* Let's add to it...
>>> mydict['Simon']=50
>>> print(mydict)
{'Simon': 50}
* The *key* ``Simon`` is associated with the *value* ``50``.
* Let's add more...
>>> mydict['Suzy'] = 95
>>> mydict['Johnny'] = 85
>>> print(mydict)
{'Suzy': 95, 'Johnny': 85, 'Simon': 50}
* The *key* ``Simon`` is associated with the *value* ``50``.
* Dictionaries always associate a *key* with a *value*
* i.e. ``dict[key] = value``
* Dictionaries are a *generalization* of lists
* A list associates *fixed indices* from 0 up to ``n`` with values.
* A dictionary associates *arbitrary strings* with values.
* Before we finish, try the following commands:
>>> mydict.keys()
>>> mydict.values()
For next class
^^^^^^^^^^^^^^^
* Your final activities and assignments for the course are available or will be released this week
* Activity 3 is out (and optional), Assignment 3 will be out in the next few days, and Assignment 4 will be released shortly after (near the end of the week)... please take a look at each of these as they are released.
* Deadlines:
* Activity 3 --- Nov. 13 @ 11:59 pm
* Assignment 3 --- Nov 20 @ 11:59 pm
* Assignment 4 --- Dec 04 @ 11:59 pm