# lijsten (van lijsten) maar veel beperkingen
vector = [5, 3.2, 6]
print(vector + vector) # geen vector-optelling
print(vector * 3) # geen vector-vermenigvuldiging
matrix = [[0, 1, 0], [1, 0, 1], [0, 1, 0]]
print(matrix) # geen pretty-print
[5, 3.2, 6, 5, 3.2, 6] [5, 3.2, 6, 5, 3.2, 6, 5, 3.2, 6] [[0, 1, 0], [1, 0, 1], [0, 1, 0]]
# wel integratie in bv matplotlib
import matplotlib.pyplot as plt
_, ax = plt.subplots()
ax.imshow(matrix)
plt.show()
import numpy as np
# aanmaak met np.array
a = np.array([1, 2, 3])
print(a[0], '\n', type(a))
print(a)
1 <class 'numpy.ndarray'> [1 2 3]
# basiseigenschappen
matrix = np.array([[1, 2.0], [0, 0]])
print(matrix)
print('\nndim: ', matrix.ndim)
print('\nshape: ', matrix.shape)
print('\ndtype: ', matrix.dtype) # NumPy heeft eigen datatypes
print('\nsize: ', matrix.size)
# wijzigen van de shape
matrix = np.array(range(25)).reshape(5,5)
print(matrix)
[[1. 2.] [0. 0.]] ndim: 2 shape: (2, 2) dtype: float64 size: 4 [[ 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]]
# aanmaak met built-in functions
print(np.arange(0, 3, 0.25)) # standard python kan geen ranges met kommagetallen genereren
print(np.linspace(0, 2.75, 12)) # interval opgedeeld in gelijke delen
[0. 0.25 0.5 0.75 1. 1.25 1.5 1.75 2. 2.25 2.5 2.75] [0. 0.25 0.5 0.75 1. 1.25 1.5 1.75 2. 2.25 2.5 2.75]
print(np.zeros([3,3]))
print(np.eye(2))
[[0. 0. 0.] [0. 0. 0.] [0. 0. 0.]] [[1. 0.] [0. 1.]]
# rekenkundige bewerkingen op element-niveau
matrix = matrix * 2
matrix = matrix + 1
print(matrix)
[[ 1 3 5 7 9] [11 13 15 17 19] [21 23 25 27 29] [31 33 35 37 39] [41 43 45 47 49]]
# indexing en slicing - deel 1
# slicing creëert views, geen kopieën
print(matrix[1,0])
print(matrix[0, -1])
print(matrix[4]) # zelfde als [4,:]
print('\n', matrix[:2,-3:])
print('\n', matrix[::2,::2]) # step size 2
print('\n', matrix[::-1]) # negative step size
11 9 [41 43 45 47 49] [[ 5 7 9] [15 17 19]] [[ 1 5 9] [21 25 29] [41 45 49]] [[41 43 45 47 49] [31 33 35 37 39] [21 23 25 27 29] [11 13 15 17 19] [ 1 3 5 7 9]]
# indexing en slicing - deel 2
# index arrays
test = np.array([10, 9, 8, 7])
print(test[ np.array([0, 0, 1, 1]) ])
[10 10 9 9]
# indexing en slicing - deel 3
# boolean "mask" index arrays
masker = (matrix > 25)
print(masker)
matrix[masker] = 0
print(matrix)
[[False False False False False] [False False False False False] [False False False True True] [ True True True True True] [ True True True True True]] [[ 1 3 5 7 9] [11 13 15 17 19] [21 23 25 0 0] [ 0 0 0 0 0] [ 0 0 0 0 0]]
# basisoperatoren
d = np.ones(3) + np.eye(3) # som op element-niveau
print(d)
e = np.full((3,3), 5)
print(e)
print(d*e) # produkt op element-niveau (!)
print(d@e) # dot-produkt (!) = d.dot(e)
[[2. 1. 1.] [1. 2. 1.] [1. 1. 2.]] [[5 5 5] [5 5 5] [5 5 5]] [[10. 5. 5.] [ 5. 10. 5.] [ 5. 5. 10.]] [[20. 20. 20.] [20. 20. 20.] [20. 20. 20.]]
a = np.array([[1,2,3],[4,5,6]])
print(a.T) # getransponeerde
[[1 4] [2 5] [3 6]]
# universal functions
scores = np.array([[14.5, 7, 9], [12, 18, 11.5], [3, 14, 15]])
print(np.mean(scores))
print(np.mean(scores, axis = 0))
print(np.average(scores, axis = 1, weights = [0.3, 0.2, 0.5]))
11.555555555555555 [ 9.83333333 13. 11.83333333] [10.25 12.95 11.2 ]
import matplotlib.pyplot as plt
x = np.arange(0, 3 * np.pi, 0.1)
y = np.sin(x)
plt.plot(x, y)
plt.show()