\[ \small\left[ \begin{array}{ccc} \htmlClass{color1}{I_1} & \htmlClass{color1}{0} & I_1 + I_2 & I_1 & 0 & \htmlClass{color1}{0} \\ \htmlClass{color1}{0} & \htmlClass{color1}{I_2} & I_2 & 0 & -I_3 & \htmlClass{color1}{0} \\ \htmlClass{color1}{0} & \htmlClass{color1}{0} & 0 & I_1 + I_3 & -I_2 & \htmlClass{color1}{I_3} \\ \end{array} \right] \left[ \begin{array}{c} R_1 \\ R_2 \\ R_3 \\ R_4 \\ R_5 \\ R_6 \\ \end{array} \right] = \left[ \begin{array}{c} V_1 \\ V_2 \\ 0\\ \end{array} \right] \]
(from SAP2000, structural analysis software)
\[ \begin{split} Ax = \left[ \begin{array}{c|c|c|c} &&&\\ &&&\\ a_{(:,1)} & a_{(:,2)} & \cdots & a_{(:,n)}\\ &&&\\ &&&\\ \end{array} \right] \left[ \begin{array}{c} x_1\\ x_2\\ \vdots\\ x_n\\ \end{array} \right] =\\ = \begin{array}{c} \\ \\ x_1\\ \\ \\ \end{array} \!\!\!\! \left[ \begin{array}{c} \\ \\ a_{(:,1)}\\ \\ \\ \end{array} \right] \begin{array}{c} \\ \\ + \cdots + ~~x_n\\ \\ \\ \end{array} \!\!\!\! \left[ \begin{array}{c} \\ \\ a_{(:,n)}\\ \\ \\ \end{array} \right]\end{split} \]
Existence and Uniqueness
\[ \|y\| = \|(y - x) + x\| \leq \|y-x\|+\|x\| \implies \|y\| - \|x\| \leq \|x-y\| \]
All norms on a finite dimensional space (such as $\mathbb R^n$) are equivalent
\[ \begin{split} \textstyle \|x\|_1^2 = \big(\sum_{i=1}^n|x_i|\big)^2 = \big(\sum_{i=1}^n |x_i|\big) \big(\sum_{j=1}^n |x_j|\big)=\\ \textstyle =\sum_{i=1}^n \sum_{j=1}^n |x_i|\,|x_j|\geq \sum_{i=1}^n |x_i|\,|x_i|=\sum_{i=1}^n |x_i|^2 =\|x\|_2^2 \end{split} \]
\[ \|x\|_1 = \sum_{i=1}^n 1 \;|x_i| \leq \big(\sum_{i=1}^n 1^2\big)^{1/2} \big( \sum_{i=1} |x_i|^2 \big)^{1/2} = \sqrt{n}\, \|x\|_2 \]
\[ \begin{aligned} \|A\|_1 &= \max_{1 \leq j \leq n} \|a_{(:,j)}\|_1 &\text{~(max column sum)} \\ \|A\|_\infty &= \max_{1 \leq i\leq n} \|a_{(i,:)}\|_1 &\text{~(max row sum)} \end{aligned} \]
numpy.linalg.cond
computes the condition number for various norms\[ Ax = \left[ \begin{array}{cc} 0.913 & 0.659\\ 0.457 & 0.330 \end{array} \right] \left[ \begin{array}{cc} x_1\\ x_2 \end{array} \right] = \left[ \begin{array}{cc} 0.254\\ 0.127 \end{array} \right] = b \]
$u_{ij} = 0$ for $i > j$
$U=\left[ \begin{array}{cc} u_{11} & u_{12} & u_{13} \\ 0 & u_{22} & u_{23} \\ 0 & 0 & u_{33} \\ \end{array} \right]$
$\ell_{ij} = 0$ for $i < j$
$L=\left[ \begin{array}{cc} l_{11} & 0 & 0 \\ l_{21} & l_{22} & 0 \\ l_{31} & l_{32} & l_{33} \\ \end{array} \right]$
$x_n = b_n / u_{nn}$
$x_{n-1} = (b_{n-1} - u_{n-1,n}x_n ) / u_{n-1,n-1}$
$\ldots$
$x_j = \left( b_j - \sum_{k=j+1}^n u_{jk}x_k \right) / u_{jj}$
$x_1 = b_1 / \ell_{11}$
$x_{2} = (b_{2} - \ell_{21}x_1 ) / \ell_{22}$
$\ldots$
$x_j =\textstyle \left( b_j - \sum_{k=1}^{j-1} \ell_{jk}x_k \right) / \ell_{jj}$
\[ X = \left[ \begin{array}{ccccccc} \htmlClass{color1} {x_{11} } & \htmlClass{color1} \cdots & \htmlClass{color1}{x_{1,j-1}} & \htmlClass{color0}{x_{1j} } & x_{1,j+1} & \cdots & x_{1n} \\ \htmlClass{color1} {\vdots } & \htmlClass{color1} \ddots & \htmlClass{color1}{\vdots } & \htmlClass{color0}{\vdots } & \vdots & \ddots & \vdots \\ \htmlClass{color1} {0 } & \htmlClass{color1} \cdots & \htmlClass{color1}{x_{j-1,j-1}} & \htmlClass{color0}{x_{j-1,j}} & x_{j-1,j+1} & \cdots & x_{j-1,n} \\ \htmlClass{color1} {0 } & \htmlClass{color1} \cdots & \htmlClass{color1}{0 } & \htmlClass{color0}{x_{jj} } & x_{j,j+1} & \cdots & x_{jn} \\ \htmlClass{color1} {0 } & \htmlClass{color1} \cdots & \htmlClass{color1}{0 } & \htmlClass{color0}{x_{j+1,j}} & x_{j+1,j+1} & \cdots & x_{j+1,n} \\ \htmlClass{color1} {\vdots } & \htmlClass{color1} \ddots & \htmlClass{color1}{\vdots } & \htmlClass{color0}{\vdots } & \vdots & \ddots & \vdots \\ \htmlClass{color1} {0 } & \htmlClass{color1} \cdots & \htmlClass{color1}{0 } & \htmlClass{color0}{x_{nj} } & x_{n,j+1} & \cdots & x_{nn} \end{array} \right] \]
\[ L_j = \left[ \begin{array}{cccccc} 1 & \cdots & 0 & 0 & \cdots & 0\\ \vdots & \ddots & \vdots & \vdots & \ddots & \vdots\\ 0 & \cdots & 1 & 0 & \cdots & 0\\ 0 & \cdots & -\ell_{j+1,j} & 1 & \cdots & 0\\ \vdots & \ddots & \vdots & \vdots & \ddots & \vdots\\ 0 & \cdots & -\ell_{nj} & 0 & \cdots & 1 \end{array} \right] \]
\[ L_j = \left[ \begin{array}{cccccc} 1 & \cdots & 0 & 0 & \cdots & 0\\ \vdots & \ddots & \vdots & \vdots & \ddots & \vdots\\ 0 & \cdots & 1 & 0 & \cdots & 0\\ 0 & \cdots & -\ell_{j+1,j} & 1 & \cdots & 0\\ \vdots & \ddots & \vdots & \vdots & \ddots & \vdots\\ 0 & \cdots & -\ell_{nj} & 0 & \cdots & 1 \end{array} \right] \quad L_j^{-1} = \left[ \begin{array}{cccccc} 1 & \cdots & 0 & 0 & \cdots & 0\\ \vdots & \ddots & \vdots & \vdots & \ddots & \vdots\\ 0 & \cdots & 1 & 0 & \cdots & 0\\ 0 & \cdots & \ell_{j+1,j} & 1 & \cdots & 0\\ \vdots & \ddots & \vdots & \vdots & \ddots & \vdots\\ 0 & \cdots & \ell_{nj} & 0 & \cdots & 1 \end{array} \right] \]
\[ \underbrace{ \left[ \begin{array}{ccccccc} \htmlClass{color5} 1 & \cdots & 0 & 0 & 0 & \cdots & 0\\ \vdots & \htmlClass{color5}\ddots & \vdots & \vdots & \vdots & \ddots & \vdots\\ 0 & \cdots & \htmlClass{color5}1 & 0 & 0 & \cdots & 0\\ 0 & \cdots & \ell_{j,j-1} & \htmlClass{color5}1 & 0 & \cdots & 0\\ 0 & \cdots & \ell_{j+1,j-1} & 0 & \htmlClass{color5}1 & \cdots & 0\\ \vdots & \ddots & \vdots & \vdots & \vdots & \htmlClass{color5}\ddots & \vdots\\ 0 & \cdots & \ell_{n,j-1} & 0 & 0 & \cdots & \htmlClass{color5}1 \end{array} \right] }_{\Large L_{j-1}^{-1}} \; \underbrace{ \left[ \begin{array}{ccccccc} \htmlClass{color5}1 & \cdots & 0 & 0 & 0 & \cdots & 0\\ \vdots & \htmlClass{color5}\ddots & \vdots & \vdots & \vdots & \ddots & \vdots\\ 0 & \cdots & \htmlClass{color5}1 & 0 & 0 & \cdots & 0\\ 0 & \cdots & 0 & \htmlClass{color5}1 & 0 & \cdots & 0\\ 0 & \cdots & 0 & \ell_{j+1,j} & \htmlClass{color5}1 & \cdots & 0\\ \vdots & \ddots & \vdots & \vdots & \vdots & \htmlClass{color5}\ddots & \vdots\\ 0 & \cdots & 0 & \ell_{nj} & 0 & \cdots & \htmlClass{color5}1 \end{array} \right] }_{\Large L_{j}^{-1}} = \left[ \begin{array}{ccccccc} \htmlClass{color5}1 & \cdots & 0 & 0 & 0 & \cdots & 0\\ \vdots & \htmlClass{color5}\ddots & \vdots & \vdots & \vdots & \ddots & \vdots\\ 0 & \cdots & \htmlClass{color5}1 & 0 & 0 & \cdots & 0\\ 0 & \cdots & \ell_{j,j-1} & \htmlClass{color5}1 & 0 & \cdots & 0\\ 0 & \cdots & \ell_{j+1,j-1} & \ell_{j+1,j} & \htmlClass{color5}1 & \cdots & 0\\ \vdots & \ddots & \vdots & \vdots & \vdots & \htmlClass{color5}\ddots & \vdots\\ 0 & \cdots & \ell_{n,j-1} & \ell_{nj} & 0 & \cdots & \htmlClass{color5}1 \end{array} \right] \]
1:$\hspace{0em}$$U=A$, $L={\rm I}$
2:$\hspace{0em}$for $j = 1:n-1$ do
3:$\hspace{1.2em}$for $i=j+1:n$ do
4:$\hspace{2.4em}$$\ell_{ij} = u_{ij}/u_{jj}$
5:$\hspace{2.4em}$for $k=j:n$ do
6:$\hspace{3.6em}$$u_{ik} = u_{ik} - \ell_{ij}u_{jk}$
7:$\hspace{2.4em}$end for
8:$\hspace{1.2em}$end for
9:$\hspace{0em}$end for
\[ L_j u_{(:,k)} = \left[ \begin{array}{cccccc} 1 & \cdots & 0 & 0 & \cdots & 0\\ \vdots & \ddots & \vdots & \vdots & \ddots & \vdots\\ 0 & \cdots & 1 & 0 & \cdots & 0\\ 0 & \cdots & -\ell_{j+1,j} & 1 & \cdots & 0\\ \vdots & \ddots & \vdots & \vdots & \ddots & \vdots\\ 0 & \cdots & -\ell_{nj} & 0 & \cdots & 1 \end{array} \right] \left[ \begin{array}{c} u_{1k}\\ \vdots\\ u_{jk}\\ u_{j+1,k}\\ \vdots\\ u_{nk} \end{array} \right] = \left[ \begin{array}{c} u_{1k}\\ \vdots\\ u_{jk}\\ u_{j+1,k} - \ell_{j+1,j}u_{jk}\\ \vdots\\ u_{nk} - \ell_{nj}u_{jk} \end{array} \right] \]
\[ \begin{array}{ccccc} \left[ \begin{array}{cccc} * & * & * & *\\ & * & * & *\\ & * & * & *\\ & \htmlClass{color2}{ x_{ij}} & \htmlClass{color2}{ *} & \htmlClass{color2}{ *} \end{array} \right] & \xrightarrow{P_1} & \left[ \begin{array}{cccc} * & * & * & *\\ & \htmlClass{color2}{ x_{ij}} & \htmlClass{color2}{ *} & \htmlClass{color2}{ *}\\ & * & * & *\\ & \htmlClass{color2}{ *} & \htmlClass{color2}{ *} & \htmlClass{color2}{ *} \end{array} \right] & \xrightarrow{L_1} & \left[ \begin{array}{cccc} * & * & * & *\\ & x_{ij} & * & *\\ & 0 & * & *\\ & 0 & * & * \end{array} \right]\\ {\rm pivot~selection} & & {\rm row~swap} \end{array}\hspace{-2em} \]
1:$\hspace{0em}$$U=A$, $L={\rm I}$, $P={\rm I}$
2:$\hspace{0em}$for $j = 1:n-1$ do
3:$\hspace{1.2em}$Select $i (\geq j)$ that maximizes $|u_{ij}|$
4:$\hspace{1.2em}$Swap rows of $U$: $u_{(j,j:n)} \leftrightarrow u_{(i,j:n)}$
5:$\hspace{1.2em}$Swap rows of $L$: $\ell_{(j,1:j-1)} \leftrightarrow \ell_{(i,1:j-1)}$
6:$\hspace{1.2em}$Swap rows of $P$: $p_{(j,:)} \leftrightarrow p_{(i,:)}$
7:$\hspace{1.2em}$for $i=j+1:n$ do
8:$\hspace{2.4em}$$\ell_{ij} = u_{ij}/u_{jj}$
9:$\hspace{2.4em}$for $k=j:n$ do
10:$\hspace{3.6em}$$u_{ik} = u_{ik} - \ell_{ij}u_{jk}$
11:$\hspace{2.4em}$end for
12:$\hspace{1.2em}$end for
13:$\hspace{0em}$end for
scipy.linalg.lu
function can do LU factorization with pivoting
>>> import numpy as np
>>> import scipy.linalg
>>> A=np.random.rand(4, 4)
>>> (P,L,U) = scipy.linalg.lu(A)
>>> A
array([[0.48657354, 0.72177328, 0.89725033, 0.10555858],
[0.19356039, 0.21192135, 0.001038 , 0.20308355],
[0.04709362, 0.82519218, 0.29700521, 0.85089909],
[0.35533098, 0.30291277, 0.98852909, 0.7303831 ]])
>>> P
array([[1., 0., 0., 0.],
[0., 0., 0., 1.],
[0., 1., 0., 0.],
[0., 0., 1., 0.]])
>>> L
array([[ 1. , 0. , 0. , 0. ],
[ 0.09678623, 1. , 0. , 0. ],
[ 0.73027189, -0.29679299, 1. , 0. ],
[ 0.39780295, -0.09956144, -0.8465861 , 1. ]])
>>> U
array([[0.48657354, 0.72177328, 0.89725033, 0.10555858],
[0. , 0.75533446, 0.21016373, 0.84068247],
[0. , 0. , 0.39566752, 0.9028053 ],
[0. , 0. , 0. , 1.00909401]])
\[ A=L L^T \]
\[ \left[\begin{array}{ccc}a_{11} & * & *\\a_{21} & a_{22} & *\\a_{31} & a_{32} & a_{33}\end{array}\right] = \left[\begin{array}{ccc}\ell_{11}^{2} & * & *\\\ell_{11} \ell_{21} & \ell_{21}^{2} + \ell_{22}^{2} & *\\\ell_{11} \ell_{31} & \ell_{21} \ell_{31} + \ell_{22} \ell_{32} & \ell_{31}^{2} + \ell_{32}^{2} + \ell_{33}^{2}\end{array}\right] \]
1:$\hspace{0em}$$L = 0$
2:$\hspace{0em}$$\ell_{ij} = a_{ij}$ for $i=1,\ldots,n$, $j=1,\ldots,i$
3:$\hspace{0em}$for $j = 1:n$ do
4:$\hspace{1.2em}$$\ell_{jj} = \sqrt{\ell_{jj}}$
5:$\hspace{1.2em}$for $i=j+1:n$ do
6:$\hspace{2.4em}$$\ell_{ij} = \ell_{ij}/\ell_{jj}$
7:$\hspace{1.2em}$end for
8:$\hspace{1.2em}$for $k=j+1:n$ do
9:$\hspace{2.4em}$for $i=k:n$ do
10:$\hspace{3.6em}$$\ell_{ik} = \ell_{ik} - \ell_{ij}\ell_{kj}$
11:$\hspace{2.4em}$end for
12:$\hspace{1.2em}$end for
13:$\hspace{0em}$end for
scipy.sparse
implements sparse linear algebradata
, row
, col
data[k]
is in row row[k]
and column col[k]
data
, indices
, indptr
i
contains elements data[indptr[i]:indptr[i+1]]
indices[indptr[i]:indptr[i+1]]
data
, indices
, indptr
j
contains elements data[indptr[j]:indptr[j+1]]
indices[indptr[j]:indptr[j+1]]
\[ \small \left[\begin{array}{ccccc} a & b & b & b & b \\ 0 & c & 0 & 0 & 0 \\ 0 & 0 & c & 0 & 0 \\ 0 & 0 & 0 & c & 0 \end{array}\right] \]
numpy.linalg.lstsq()
does
numpy.linalg.qr()
does reduced QR factorization>>> import numpy as np
>>> np.random.seed(2022)
>>> a = np.random.random((4,2))
>>> a
array([[0.00935861, 0.49905781],
[0.11338369, 0.04997402],
[0.68540759, 0.48698807],
[0.89765723, 0.64745207]])
>>> (q, r) = np.linalg.qr(a)
>>> q
array([[-0.00824455, 0.99789386],
[-0.09988626, -0.06374317],
[-0.60381526, -0.01057732],
[-0.79079826, 0.00572413]])
>>> r
array([[-1.13512797, -0.81516102],
[ 0. , 0.4933763 ]])
mode="complete"
gives complete QR factorization>>> import numpy as np
>>> np.random.seed(2022)
>>> a = np.random.random((4,2))
>>> a
array([[0.00935861, 0.49905781],
[0.11338369, 0.04997402],
[0.68540759, 0.48698807],
[0.89765723, 0.64745207]])
>>> (q, r) = np.linalg.qr(a, mode="complete")
>>> q
array([[-0.00824455, 0.99789386, -0.02953283, -0.0571636 ],
[-0.09988626, -0.06374317, -0.61111959, -0.78261893],
[-0.60381526, -0.01057732, 0.66414863, -0.44068338],
[-0.79079826, 0.00572413, -0.42961291, 0.43593358]])
>>> r
array([[-1.13512797, -0.81516102],
[ 0. , 0.4933763 ],
[ 0. , 0. ],
[ 0. , 0. ]])
\[ q_j = \frac{a_{(:,j)} - \sum_{i=1}^{j-1} r_{ij}q_i}{r_{jj}} \]
1:$\hspace{0em}$for $j = 1:n$ do
2:$\hspace{1.2em}$$v_j = a_{(:,j)}$
3:$\hspace{1.2em}$for $i=1:j-1$ do
4:$\hspace{2.4em}$$r_{ij} = q_i^T a_{(:,j)}$
5:$\hspace{2.4em}$$v_j = v_j - r_{ij}q_i$
6:$\hspace{1.2em}$end for
7:$\hspace{1.2em}$$r_{jj} = \|v_j\|_2$
8:$\hspace{1.2em}$$q_j = v_j / r_{jj}$
9:$\hspace{0em}$end for
1:$\hspace{0em}$for $i = 1:n$ do
2:$\hspace{1.2em}$$v_i = a_{(:,i)}$
3:$\hspace{0em}$end for
4:$\hspace{0em}$for $i=1:n$ do
5:$\hspace{1.2em}$$r_{ii} = \|v_i\|_2$
6:$\hspace{1.2em}$$q_i = v_i / r_{ii}$
7:$\hspace{1.2em}$for $j=i+1:n$ do
8:$\hspace{2.4em}$$r_{ij} = q_i^Tv_j$
9:$\hspace{2.4em}$$v_j = v_j - r_{ij} q_i$
10:$\hspace{1.2em}$end for
11:$\hspace{0em}$end for
scipy.linalg.qr()
calling dgeqrf()
from LAPACK\[ \htmlClass{color0}{ \|v_\text{bad}\|_2^2} = \big\|\|x\|_2 e_1 - x\big\|_2^2 \approx \htmlClass{color0}{ 0} \]
\[ \begin{aligned} \hspace{-0.5cm} \htmlClass{color1}{ \|v_\text{good}\|_2^2} &= \big\|\mathop{\mathrm{sign}}(x_1)\|x\|_2 e_1 + x\big\|_2^2 \\ &= (\mathop{\mathrm{sign}}(x_1)\|x\|_2 + x_1)^2 + \|x_{(2:m-k+1)}\|_2^2\\ &= (\mathop{\mathrm{sign}}(x_1)\|x\|_2 + \mathop{\mathrm{sign}}(x_1)|x_1|)^2 + \|x_{(2:m-k+1)}\|_2^2\\ &= (\|x\|_2 + |x_1|)^2 + \|x_{(2:m-k+1)}\|_2^2 \approx \htmlClass{color1}{ (2\|x\|_2)^2}\end{aligned} \]
1:$\hspace{0em}$for $k=1:n$ do
2:$\hspace{1.2em}$$x = a_{(k:m,k)}$
3:$\hspace{1.2em}$$v_k = \mathop{\mathrm{sign}}(x_1)\|x\|_2 e_1 + x$
4:$\hspace{1.2em}$$v_k = v_k / \|v_k\|_2$
5:$\hspace{1.2em}$$a_{(k:m,k:n)} = a_{(k:m,k:n)} - 2v_k(v_k^T a_{(k:m,k:n)})$
6:$\hspace{0em}$end for
1:$\hspace{0em}$for $k=n:-1:1$ do
2:$\hspace{1.2em}$$y_{(k:m)} = y_{(k:m)} - 2v_k(v_k^T y_{(k:m)})$
3:$\hspace{0em}$end for
1:$\hspace{0em}$for $k=1:n$ do
2:$\hspace{1.2em}$$b_{(k:m)} = b_{(k:m)} - 2v_k(v_k^T b_{(k:m)})$
3:$\hspace{0em}$end for
\[ G(i,j,\theta) = \left( \begin{array}{ccccccc} 1 & \ldots & 0 & \ldots & 0 & \ldots & 0 \\ \vdots & \ddots & \vdots & \ddots & \vdots & \ddots & \vdots \\ 0 & \ldots & c & \ldots & -s & \ldots & 0 \\ \vdots & \ddots & \vdots & \ddots & \vdots & \ddots & \vdots \\ 0 & \ldots & s & \ldots & c & \ldots & 0 \\ \vdots & \ddots & \vdots & \ddots & \vdots & \ddots & \vdots \\ 0 & \ldots & 0 & \ldots & 0 & \ldots & 1 \end{array} \right) \]
1:$\hspace{0em}$$R=A, Q=I$
2:$\hspace{0em}$for $k = 1:n$ do
3:$\hspace{1.2em}$for $j = m:k+1$ do
4:$\hspace{2.4em}$Construct $G=G(j-1,j,\theta)$ to eliminate $a_{jk}$
5:$\hspace{2.4em}$$R=G R$
6:$\hspace{2.4em}$$Q=Q G^T$
7:$\hspace{1.2em}$end for
8:$\hspace{0em}$end for
\[ \left[ \begin{array}{cccccc} * & * & * & * & * & * \\ 5 & * & * & * & * & * \\ \htmlClass{color5} 4 & \htmlClass{color5} 6 & \htmlClass{color5} * & \htmlClass{color5} * & \htmlClass{color5} * & \htmlClass{color5} * \\ \htmlClass{color5}{ \boxed{3}} & \htmlClass{color5} 5 & \htmlClass{color5} 7 & \htmlClass{color5} * & \htmlClass{color5} * & \htmlClass{color5} * \\ \htmlClass{color3} 2 & \htmlClass{color3}4 & \htmlClass{color3}6 & \htmlClass{color3}8 & \htmlClass{color3}* & \htmlClass{color3}* \\ \htmlClass{color3}1 & \htmlClass{color3}{ \boxed{3}} & \htmlClass{color3}5 & \htmlClass{color3}7 & \htmlClass{color3}9 & \htmlClass{color3}* \end{array} \right] \]
\[ \left[ \begin{array}{c} \\ \\ ~~~~~~A~~~~~~~\\ \\ \\ \end{array} \right] \left[ \begin{array}{c|c|c} &&\\ &&\\ v_1 & \cdots & v_n\\ &&\\ &&\\ \end{array} \right] \begin{array}{c} \\ \\ =\\ \\ \\ \end{array} \left[ \begin{array}{c|c|c} &&\\ &&\\ u_1 & \cdots & u_n\\ &&\\ &&\\ \end{array} \right] \left[ \begin{array}{ccc} \sigma_1&&\\ &\ddots &\\ &&\sigma_n\\ \end{array} \right] \]
numpy.linalg.svd()
computes>>> import numpy as np
>>> np.random.seed(2022)
>>> a=np.random.random((4,2))
>>> a
array([[0.00935861, 0.49905781],
[0.11338369, 0.04997402],
[0.68540759, 0.48698807],
[0.89765723, 0.64745207]])
>>> (u, s, v) = np.linalg.svd(a)
>>> u
array([[-0.22570503, 0.97206861, -0.02953283, -0.0571636 ],
[-0.08357767, -0.08399541, -0.61111959, -0.78261893],
[-0.58696968, -0.14202585, 0.66414863, -0.44068338],
[-0.77300621, -0.16690133, -0.42961291, 0.43593358]])
>>> s
array([1.42929716, 0.39183261])
>>> v
array([[-0.77506396, -0.63188279],
[-0.63188279, 0.77506396]])
full_matrices=0
>>> import numpy as np
>>> np.random.seed(2022)
>>> a = np.random.random((4,2))
>>> a
array([[0.00935861, 0.49905781],
[0.11338369, 0.04997402],
[0.68540759, 0.48698807],
[0.89765723, 0.64745207]])
>>> (u, s, v) = np.linalg.svd(a, full_matrices=0)
>>> u
array([[-0.22570503, 0.97206861],
[-0.08357767, -0.08399541],
[-0.58696968, -0.14202585],
[-0.77300621, -0.16690133]])
>>> s
array([1.42929716, 0.39183261])
>>> v
array([[-0.77506396, -0.63188279],
[-0.63188279, 0.77506396]])