NumPy, SciPy and SciKits: Difference between revisions

From AstroEdWiki
Jump to navigation Jump to search
Line 17: Line 17:
  myarray = np.zeros(30, dtype=np.float32)
  myarray = np.zeros(30, dtype=np.float32)


The dtype argument is optional and can be  
The dtype argument is optional (defaults to float64) and can be  


*unit8, 16, 32, 64
*unit8, 16, 32, 64
*int8, 16, 32, 64
*int8, 16, 32, 64
*float32, 64, 128
*float16, 32, 64, 128
*complex64, 128
*complex64, 128
Arranys can be arranged to be multi-dimensional.  In our example of zeros, we could instead have
myarray = np.zeros((3,4,5))
print myarray
which will show
array([[[ 0.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  0.]],
      [[ 0.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  0.]],
      [[ 0.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  0.]]])
Notice that the array is created with np.zeros(), and the argument is (3,4,5).  This means an array of 3x4x5 elements, all zero (float64, by default), grouped as 3 elements, each of 4 elements, each of 5 elements.
An array can be reshaped after it is made.  The array stays the same way in memory, but the grouping changes.
myarray = np.array( [1,3,5,7,11,13] )
makes a linear array  of 6 elements, and
myarray.reshape(2,3)
 
changes its shape, so it will be
array([[ 1,  3,  5],
      [ 7, 11, 13]])

Revision as of 22:24, 20 February 2013

Python provides a framework on which numerical and scientific data processing can be built. As part of our short course on Python for Physics and Astronomy we will look at the capabilities of the NumPy, SciPy and SciKits packages. This is a brief overview with a few examples drawn primarily from the excellent but short introductory book SciPy and NumPy by Eli Bressert (O'Reilly 2012).

NumPy

NumPy adds arrays and linear albegra to Python, with special functions, transformations, the ability to operate on all elements of an array in one stroke.

Arrays are at the heart of NumPy. The program

import numpy as np

mylist = [1, 3, 5, 7, 11, 13]
myarray = np.array(mylist)
print myarray

creates a list and makes an array from it. You can create an array of 30 32-bit floating point zeros with

myarray = np.zeros(30, dtype=np.float32)

The dtype argument is optional (defaults to float64) and can be

  • unit8, 16, 32, 64
  • int8, 16, 32, 64
  • float16, 32, 64, 128
  • complex64, 128

Arranys can be arranged to be multi-dimensional. In our example of zeros, we could instead have

myarray = np.zeros((3,4,5))
print myarray

which will show

array([[[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]],
      [[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]],
      [[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]]])

Notice that the array is created with np.zeros(), and the argument is (3,4,5). This means an array of 3x4x5 elements, all zero (float64, by default), grouped as 3 elements, each of 4 elements, each of 5 elements.

An array can be reshaped after it is made. The array stays the same way in memory, but the grouping changes.

myarray = np.array( [1,3,5,7,11,13] )

makes a linear array of 6 elements, and

myarray.reshape(2,3)
 

changes its shape, so it will be

array([[ 1,  3,  5],
      [ 7, 11, 13]])