Numpy quick (live) intro

Computing Tools class, 25 Sep 2018

Importing:

In [1]:
import numpy as np

Creating

In [2]:
a = np.array([3.14, 60, 17])
In [3]:
a
Out[3]:
array([ 3.14, 60.  , 17.  ])
In [4]:
m = np.array([1, 2, 3], dtype=int)
In [5]:
type(m)
Out[5]:
numpy.ndarray
In [6]:
type(m[0])
Out[6]:
numpy.int64
In [7]:
z = np.zeros((10, 10))
In [8]:
z
Out[8]:
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.],
       [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.]])
In [9]:
z2 = np.zeros_like(z)
In [10]:
z2
Out[10]:
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.],
       [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.]])
In [11]:
onesy = np.ones(15)
In [12]:
onesy
Out[12]:
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
In [13]:
c = z + z2
In [14]:
c = z * z2
In [15]:
c
Out[15]:
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.],
       [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.]])
In [16]:
a
Out[16]:
array([ 3.14, 60.  , 17.  ])
In [17]:
a[:]
Out[17]:
array([ 3.14, 60.  , 17.  ])
In [18]:
a[1:]
Out[18]:
array([60., 17.])
In [19]:
a[:2]
Out[19]:
array([ 3.14, 60.  ])
In [20]:
a[1:3]
Out[20]:
array([60., 17.])
In [21]:
a[-1]
Out[21]:
17.0
In [22]:
a
Out[22]:
array([ 3.14, 60.  , 17.  ])
In [23]:
a[-2]
Out[23]:
60.0
In [24]:
a[-3]
Out[24]:
3.14
In [25]:
b = np.array([10., 9., 8.])
In [26]:
b
Out[26]:
array([10.,  9.,  8.])
In [27]:
a *b
Out[27]:
array([ 31.4, 540. , 136. ])
In [28]:
np.shape(a)
Out[28]:
(3,)
In [29]:
np.size(a)
Out[29]:
3
In [30]:
np.shape(c)
Out[30]:
(10, 10)
In [31]:
np.size(c)
Out[31]:
100
In [32]:
c.size
Out[32]:
100
In [33]:
b.shape
Out[33]:
(3,)
In [34]:
c.reshape(1,100)
Out[34]:
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., 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.]])
In [35]:
d = np.arange(25)
In [36]:
d
Out[36]:
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])
In [37]:
d = np.arange(0, 100, 5)
In [38]:
d
Out[38]:
array([ 0,  5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80,
       85, 90, 95])
In [39]:
np.amin(d)
Out[39]:
0
In [40]:
np.amax(d)
Out[40]:
95
In [41]:
np.mean(d)
Out[41]:
47.5
In [42]:
np.sum(d)
Out[42]:
950
In [43]:
a
Out[43]:
array([ 3.14, 60.  , 17.  ])
In [44]:
b
Out[44]:
array([10.,  9.,  8.])
In [45]:
a == b
Out[45]:
array([False, False, False])
In [46]:
a > b
Out[46]:
array([False,  True,  True])
In [47]:
np.where(a > 10.)
Out[47]:
(array([1, 2]),)
In [48]:
a
Out[48]:
array([ 3.14, 60.  , 17.  ])
In [49]:
w = np.where(a > 10.0)[0]
In [50]:
w
Out[50]:
array([1, 2])
In [51]:
a[w]
Out[51]:
array([60., 17.])
In [52]:
np.where(np.logical_and(a > 3.0, a < 20.0))[0]
Out[52]:
array([0, 2])
In [53]:
dt = 1000.0
run_duration = 2.0e6
num_time_steps = int(run_duration / dt)
C = np.zeros(num_time_steps)
k = np.log(2.0) / 730000.0
P = 20.0
In [54]:
for i in range(1, num_time_steps):
    C[i] = C[i-1] + dt * (-k * C[i-1] + P)
In [55]:
import matplotlib.pyplot as plt
%matplotlib inline

t = np.arange(0.0, run_duration / 1000.0, dt / 1000.0)

plt.plot(t, C)
plt.xlabel('Time (ky)')
plt.ylabel('Concentration (atoms/g quartz)')
Out[55]:
Text(0,0.5,'Concentration (atoms/g quartz)')