In exercise 7, the PCA decomposition relies on the numpy.linalg.svd function. However, the function returns a different set of values than Octave and it can be seen in plot than the two components are not perpendicular to each other. I suspect that there is some error in the low level library versions.