cs229_python_friday
cs229_python_friday
https://www.researchgate.net/figure/Genealogy-of-Programming-Languages-doi101371-
journalpone0088941g001_fig1_260447599
Before you start
Use Anaconda
Create a new environment (full Conda)
• PyCharm (IDE)
• Notepad ++/gedit
PyCharm
• Great debugger
• Proper project
management
sorted(random_list)
np.linalg.eig Get eigen value (Read documentation on eigh and numpy equivalent)
array.dtype Check data type of array (for precision, for weird behavior)
array_1 + 5
array_1 * 5
Numpy supports many types np.sqrt(array_1)
np.power(array_1, 2)
of algebra on an entire array np.exp(array_1)
np.log(array_1)
Dot product and matrix multiplication
array_1 @ array_2
A few ways to write dot array_1.dot(array_2)
np.dot(array_1, array_2)
product
weight_matrix = np.array([1, 2, 3, 4]).reshape(2, 2)
sample = np.array([[50, 60]]).T
Matrix multiplication like Ax np.matmul(weight_matrix, sample)
a * a
np.multiply(a, a)
np.multiply(a, 10)
Broadcasting
Numpy compares dimensions of operands, then infers missing/mismatched
dimensions so the operation is still valid. Be careful with DIMENSIONS
op1 = np.array([i for i in range(9)]).reshape(3, 3)
op2 = np.array([[1, 2, 3]])
op3 = np.array([1, 2, 3])
array([[ 1, 3, 5],
[ 4, 6, 8],
[ 7, 9, 11]])
# Notice that the results here are DIFFERENT!
pp.pprint(op1 + op2) array([[ 1, 2, 3],
pp.pprint(op1 + op2.T) [ 5, 6, 7],
[ 9, 10, 11]])
array([[ 1, 3, 5],
# Notice that the results here are THE SAME! [ 4, 6, 8],
pp.pprint(op1 + op3) [ 7, 9, 11]])
pp.pprint(op1 + op3.T)
array([[ 1, 3, 5],
[ 4, 6, 8],
[ 7, 9, 11]])
Broadcasting for pairwise distance
samples = np.random.random((15, 5))
# Without broadcasting
expanded1 = np.expand_dims(samples, axis=1)
tile1 = np.tile(expanded1, (1, samples.shape[0], 1))
expanded2 = np.expand_dims(samples, axis=0)
tile2 = np.tile(expanded2, (samples.shape[0], 1 ,1))
diff = tile2 - tile1
Both achieve the effect of
distances = np.linalg.norm(diff, axis=-1)
# With broadcasting
diff = samples[: ,np.newaxis, :]
- samples[np.newaxis, :, :]
distances = np.linalg.norm(diff, axis=-1)
print(dot)
avg_dist = np.mean(total_dist)
Pandas (https://pandas.pydata.org/)
• Dataframe (database/Excel-like)
• Easy filtering, aggregation (also plotting, but few
people uses Pandas for plotting)
Matplotlib
• Visualization (line, scatter, bar, images and even
interactive 3D)
Example plots
https://matplotlib.org/3.1.1/gallery/index.html
import matplotlib
Import import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
Plotting ax.plot(t, s)
fig.savefig("test.png")
Save/show plt.show()
Plot with dash lines and legend
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.legend()
plt.show()
Using subplot
plt.grid()
plt.plot(x, y_sin)
plt.title('Sine Wave')
plt.grid()
plt.tight_layout()
Plot area under curve
Confusion matrix
https://scikit-learn.org/stable/auto_examples/model_selection/plot_confusion_matrix.html
fig, ax = plt.subplots()
im = ax.imshow(cm, interpolation='nearest', cmap=cmap)
ax.figure.colorbar(im, ax=ax)
# We want to show all ticks...
ax.set(xticks=np.arange(cm.shape[1]),
yticks=np.arange(cm.shape[0]),
xticklabels=classes, yticklabels=classes,
ylabel='True label', xlabel='Predicted label’,
title=title)
Questions?
Links
Properly
What is a class?
Instance variable
Does something
with the instance
To use a class
Instantiate a class,
get an instance
2D list
list_of_list = [[1,2,3], [4,5,6], [7,8,9]]
List comprehension
initialize_a_list = [i for i in range(9)]
initialize_a_list = [i ** 2 for i in range(9)]
initialize_2d_list = [[i + j for i in range(5)] for j in range(9)]
Insert/Pop
my_list.insert(0, ‘stuff)
print(my_list.pop(0))
More on List
Sort a list
random_list = [3,12,5,6]
sorted_list = sorted(random_list)
Comprehension
my_dict = {i: i ** 2 for i in range(10)}
my_set = {i ** 2 for i in range(10)}