# [SciPy-user] null space of a matrix

Bastian Weber bastian.weber@gmx-topmail...
Sat Dec 13 09:57:15 CST 2008

```Hello to the list!

In Summer of 2005 there was a short discussion on how to compute the
null space of a given matrix.

The starting message can be found here:
http://projects.scipy.org/pipermail/scipy-user/2005-June/004645.html

Then Ryan summarized the discussion in this short function:

> def null(A, eps=1e-15):
>     u, s, vh = scipy.linalg.svd(A)
>     null_mask = (s <= eps)
>     null_space = scipy.compress(null_mask, vh, axis=0)
>     return scipy.transpose(null_space)

Applying this to a n by m matrix with n <> m did not work. I think it is
probably because s is containing only the nonzero singular values.

So I extended the code a little bit such that, len(s) now = m with m the
bigger dim of A.

import scipy
import scipy.linalg

def null(A, eps=1e-15):
"""
computes the null space of the real matrix A
"""
n, m = scipy.shape(A)
if n > m :
return scipy.transpose(null(scipy.transpose(A), eps))
return null(scipy.transpose(A), eps)
u, s, vh = scipy.linalg.svd(A)
s=scipy.append(s,scipy.zeros(m))[0:m]
return scipy.transpose(null_space)

# example:
K=scipy.matrix(scipy.rand(3,7))
#       matrix type to have convient multiplication later
G=K.transpose()

# results should be "almost" zero
print K*null(K)
print null(G)*G

As my knowledge of linear algebra is more or less on average level of
engineering students I dont know whether this extended code is correct
or usefull. Just in case, feel free to use it.