Multidimensional numpy arrays¶
Creating arrays with more than one dimension¶
So far we have encountered numpy arrays that have one dimension - their elements are arranged as a list and they can be accessed using a single index:
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
a[0] # get the 0-th element of the array
1
In general numpy arrays can have more than one dimension. One way to
create such array is to start with a 1-dimensional array and use the
numpy reshape()
function that rearranges elements of that array into
a new shape.
b = np.reshape(
a, # the array to be reshaped
(2,3) # dimensions of the new array
)
print(a) # the original 1-dimensional array
[1 2 3 4 5 6]
print(b) # the reshaped array
[[1 2 3] [4 5 6]]
b
is a 2-dimensional array, with 2 rows and 3 columns. We can access
its elements by specifying row and column indexes:
b[0,2] # get the element in 0-th row and 2-nd column
3
b[0,2] = 100
print(b)
[[ 1 2 100] [ 4 5 6]]
The numpy functions zeros()
, ones()
, and empty()
can be also
used to create arrays with more than one dimension:
c = np.ones((3,4)) # creates an array 3 rows and 4 columns
print(c)
[[ 1. 1. 1. 1.] [ 1. 1. 1. 1.] [ 1. 1. 1. 1.]]
Mathematical operations on multidimensional arrays¶
Mathematical operations on multidimensional arrays work similarly as for 1-dimensional arrays.
a = np.arange(4)
b = np.reshape(a, (2,2))
print(b)
[[0 1] [2 3]]
c = 10*b # multiplication by a number
print(c)
[[ 0 10] [20 30]]
d = np.ones((2,2))
e = b+d # addition of two arrays of the same dimensions
print(e)
[[ 1. 2.] [ 3. 4.]]
f = b*e # multiplication of two arrays of the same dimensions
print(f)
[[ 0. 2.] [ 6. 12.]]
Notice that array multiplication multiplies corresponding elements of
arrays. In order to perform matrix multiplication of 2-dimensional
arrays we can use the numpy dot()
function:
g = np.dot(b, e) # matrix multiplication of b and e
print(g)
[[ 3. 4.] [ 11. 16.]]
Mathematical functions defined by numpy can be applied to multidimensional arrays:
h = np.cos(g) # compute cosine of all elements of the array g
print(h)
[[-0.9899925 -0.65364362] [ 0.0044257 -0.95765948]]
Slicing multidimensional arrays¶
In order to create a slice of a multidimensional array we need to specify which part of each dimension we want to select.
a = np.reshape(np.arange(30), (5,6)) # create a 5x6 array
print(a)
[[ 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 25 26 27 28 29]]
b = a[1:4, 0:2] #select elements in rows 1-3 and columns 0-1
print(b)
[[ 6 7] [12 13] [18 19]]
c = a[:3, 2:4] #select elements in rows 0-2 and columns 2-3
print(c)
[[ 2 3] [ 8 9] [14 15]]
d = a[:, 0] # select all elements in the 0-th column
print(d)
[ 0 6 12 18 24]
Note. a[i]
is the same as a[i,:]
i.e. it selects the i-th
row of the array:
print(a[1])
[ 6 7 8 9 10 11]
Similarly as for 1-dimensional arrays slicing produces a view of the original array, and changing a slice changes the original array:
b = a[:3, :3]
print(b)
[[ 0 1 2] [ 6 7 8] [12 13 14]]
b[0,0] = 1000
print(b)
[[1000 1 2] [ 6 7 8] [ 12 13 14]]
print(a)
[[1000 1 2 3 4 5] [ 6 7 8 9 10 11] [ 12 13 14 15 16 17] [ 18 19 20 21 22 23] [ 24 25 26 27 28 29]]
We can use this to change many entries of an array at once
a[:4, :4] = 0 # set all entries of the slize to 0
print(a)
[[ 0 0 0 0 4 5] [ 0 0 0 0 10 11] [ 0 0 0 0 16 17] [ 0 0 0 0 22 23] [24 25 26 27 28 29]]