Why does np.linalg.eig produce an opposite-signed eigenvector? I am learning SVD by following this MIT course.  In this video, the lecturer is finding the SVD for 

$$
\begin{pmatrix} 5 &amp; 5 \\ -1 &amp; 7 \end{pmatrix},
$$

which involves finding the eigenvalues for

$$
C^T C = 
\begin{pmatrix}
26 &amp; 18 \\ 18 &amp; 74
\end{pmatrix}.
$$

In the example (at the time in the link above), the lecturer finds eigenvalues 

$$\begin{pmatrix}-3/\sqrt{10} \\ 1/\sqrt{10} \end{pmatrix}, 
\begin{pmatrix} 1/\sqrt{10} \\ 3/\sqrt{10} \end{pmatrix}.$$

But np.linalg.eig produces the opposite vector to the second one:

w, v = np.linalg.eig(C.T*C)
v
matrix([[-0.9486833 , -0.31622777],
        [ 0.31622777, -0.9486833 ]])


Why?
Any scalar multiple of an eigenvector is also an eigenvector.  LAPACK (which np.linalg.eig uses under the hood) chooses to return unit-length eigenvectors (good for SVD!), but this still leaves two choices, and there doesn't seem to be a convention for which one to return; it's up to the underlying algorithm (which in turn may depend on the input data).

https://stackoverflow.com/questions/17998228/sign-of-eigenvectors-change-depending-on-specification-of-the-symmetric-argument