Skip to content

Instantly share code, notes, and snippets.

@lukeolson
Last active February 1, 2018 19:37
Show Gist options
  • Save lukeolson/529c010c475fdaca9e741ddc2dba3b43 to your computer and use it in GitHub Desktop.
Save lukeolson/529c010c475fdaca9e741ddc2dba3b43 to your computer and use it in GitHub Desktop.
test pinv speed
import scipy.linalg as sla
import numpy as np
from pyamg.util.linalg import pinv_array
from scipy.linalg.lapack import get_lapack_funcs
from scipy.linalg.lapack import _compute_lwork
import time
import matplotlib.pyplot as plt
%matplotlib inline
nt = 10
#nlist = [2,4,8,16,32,64,128,256]
nlist = np.arange(2,100)
tpinv_array = np.zeros((len(nlist), nt))
tpinv = np.zeros((len(nlist), nt))
tpinv2 = np.zeros((len(nlist), nt))
tnp_pinv = np.zeros((len(nlist), nt))
for j, n in enumerate(nlist):
a0 = np.random.rand(n,n)
for i in range(nt):
a = a0.copy()[np.newaxis,:,:]
t = time.time()
pinv_array(a)
t = time.time() - t
tpinv_array[j, i] = t
for i in range(nt):
a = a0.copy()
t = time.time()
a = sla.pinv(a)
t = time.time() - t
tpinv[j, i] = t
for i in range(nt):
a = a0.copy()
t = time.time()
a = sla.pinv2(a)
t = time.time() - t
tpinv2[j, i] = t
for i in range(nt):
a = a0.copy()
t = time.time()
a = np.linalg.pinv(a)
t = time.time() - t
tnp_pinv[j, i] = t
plt.semilogy(nlist, tpinv_array.min(axis=1), label='pyamg.pinv_array', lw=3)
plt.semilogy(nlist, tpinv.min(axis=1), label='scipy.linalg.pinv', lw=3)
plt.semilogy(nlist, tpinv2.min(axis=1), label='scipy.linalg.pinv2', lw=3)
plt.semilogy(nlist, tnp_pinv.min(axis=1), label='numpy.linalg.pinv', lw=3)
plt.legend()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment