Python is free, consistently and completely object oriented, and has a
large number of (free) scientific toolboxes (e.g.
http://www.scipy.org/). It is used by Google, NASA, and many others.
Information can be found under http://www.python.org/. If you want to
use Python for scientific applications, currently the best way to get
started is the Python(x,y)
distribution, the smaller
WinPython, or the free
*Anaconda* version from Contiuum
Analytics. These
distributions are all free, and contain the complete scientific and
engineering development software for numerical computations, data
analysis and data visualization based on Python programming language, Qt
graphical user interfaces, and the interactive scientific development
environment Spyder. If you already have experience with Matlab, the
article NumPy for Matlab
Users provides an
overview of the similarities and differences between the two languages.

More information about Python, and links to related material, can be found under http://work.thaslwanter.at/Stats/html/statsIntroduction.html#python

The following two Python modules give an example of how Python can handle matrix multiplications and graphics simply and efficiently:

```
"""
RotMat.py Definition of 3D rotation matrices
Created on Oct 26, 2010
@author: Thomas Haslwanter
Ver. 1.0
"""
from numpy import *
def R1(psi):
## Rotation about the 1-axis
# convert from degrees into radian:
psi = psi * pi/180;
R = array([[1, 0, 0],
[0, cos(psi), -sin(psi)],
[0, sin(psi), cos(psi)]])
return R
def R2(phi):
## Rotation about the 2-axis
# convert from degrees into radian:
phi = phi * pi/180;
R = array([[cos(phi), 0, sin(phi)],
[0, 1, 0],
[-sin(phi), 0, cos(phi)]])
return R
def R3(theta):
## Rotation about the 3-axis
# convert from degrees into radian:
theta = theta * pi/180;
R = array([[cos(theta), -sin(theta), 0],
[sin(theta), cos(theta), 0],
[0, 0, 1]])
return R
```

```
''' Demonstration how Python can handle matrix multiplication and simple graphics
Created on Oct 26, 2010
@author: ThH
Ver 1.0
'''
import RotMat
import numpy as np
def rotateVector():
## Define vector & matrix and rotate vector
myVector = np.array([0,1,0])
psi = 20
rotMat = RotMat.R1(psi)
vectorRotated = np.dot(rotMat, myVector)
print(vectorRotated)
def plotLine():
##import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0,10,0.1)
y = np.sin(x)
plt.plot(x,y)
plt.show()
def main():
myInput = input('Do you want to "r"otate a vector, or "p"lot a line? ')
if myInput == 'r':
rotateVector()
else:
plotLine()
if __name__ == '__main__':
main()
```

The figure below shows a screen-shot of this code in the Spyder development environment that comes with python (x,y). For interactive work, similar to MATLAB, the IPython console can facilitate a smooth transition from Matlab to Python.

*Screenshot of Spyder, a programming environment that is very similar to Matlab but leverages on IPython.*