Skip to content

Instantly share code, notes, and snippets.

@haasad
Created November 21, 2016 14:20
Show Gist options
  • Save haasad/8334d2281d6d6072f16b78085fabf4d3 to your computer and use it in GitHub Desktop.
Save haasad/8334d2281d6d6072f16b78085fabf4d3 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import pickle\n",
"import numpy as np\n",
"import scipy.sparse as sp\n",
"from scipy.sparse.linalg import spsolve as superlu_solve\n",
"from scikits.umfpack import spsolve as umfpack_solve\n",
"from pypardiso.scipy_aliases import spsolve as pypardiso_solve"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<13831x13831 sparse matrix of type '<class 'numpy.float64'>'\n",
"\twith 147427 stored elements in Compressed Sparse Row format>"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"with open('cutoff33_tm.pickle', 'rb') as i:\n",
" cutoff33_tm = pickle.load(i)\n",
"cutoff33_tm"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"b = np.ones(cutoff33_tm.shape[0])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## SuperLU"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### CSR "
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 1.48 s, sys: 216 ms, total: 1.69 s\n",
"Wall time: 1.08 s\n"
]
}
],
"source": [
"%time x_slu_csr = superlu_solve(cutoff33_tm, b, use_umfpack=False)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"b_slu_csr = cutoff33_tm @ x_slu_csr"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"min_max_mean = lambda x: print(x.min(), x.max(), x.mean())"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-17.7447141878 243.275594729 1.02891215366\n"
]
}
],
"source": [
"print(b_slu_csr.min(), b_slu_csr.max(), b_slu_csr.mean())"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"number_of_large_deviations = lambda x: np.sum((x > 1.0001) | (x < 0.9999))"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"142"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"number_of_large_deviations(b_slu_csr)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"average_deviation = lambda x: np.abs((x-1)).mean()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.037462630675729448"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"average_deviation(b_slu_csr)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### CSC "
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"cutoff33_tm_csc = cutoff33_tm.tocsc()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 1min 7s, sys: 13.6 s, total: 1min 20s\n",
"Wall time: 41.7 s\n"
]
}
],
"source": [
"%time x_slu_csc = superlu_solve(cutoff33_tm_csc, b, use_umfpack=False)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"b_slu_csc = cutoff33_tm @ x_slu_csc"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.999214063808 1.00152456388 1.00000036889\n"
]
}
],
"source": [
"min_max_mean(b_slu_csc)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"91"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"number_of_large_deviations(b_slu_csc)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"3.3068292117605454e-06"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"average_deviation(b_slu_csc)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Umfpack"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### CSR"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 253 ms, sys: 48.5 ms, total: 302 ms\n",
"Wall time: 207 ms\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/adrian/miniconda3/envs/umf/lib/python3.5/site-packages/scikits/umfpack/umfpack.py:718: UmfpackWarning: (almost) singular matrix! (estimated cond. number: 1.06e+13)\n",
" warnings.warn(msg, UmfpackWarning)\n"
]
}
],
"source": [
"%time x_umf_csr = umfpack_solve(cutoff33_tm, b)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"b_umf_csr = cutoff33_tm @ x_umf_csr"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.999755859375 1.000147257 0.999999966885\n"
]
}
],
"source": [
"min_max_mean(b_umf_csr)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"4"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"number_of_large_deviations(b_umf_csr)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1.1938698268681624e-07"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"average_deviation(b_umf_csr)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### CSC"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 3.62 s, sys: 326 ms, total: 3.94 s\n",
"Wall time: 1.98 s\n"
]
}
],
"source": [
"%time x_umf_csc = umfpack_solve(cutoff33_tm_csc, b)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"b_umf_csc = cutoff33_tm @ x_umf_csc"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.999877929688 1.00024414062 1.00000002486\n"
]
}
],
"source": [
"min_max_mean(b_umf_csc)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"number_of_large_deviations(b_umf_csc)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1.2506283036388155e-07"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"average_deviation(b_umf_csc)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## PyPardiso"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### CSR"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 846 ms, sys: 86.7 ms, total: 933 ms\n",
"Wall time: 377 ms\n"
]
}
],
"source": [
"%time x_pp_csr = pypardiso_solve(cutoff33_tm, b)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"b_pp_csr = cutoff33_tm @ x_pp_csr"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.999458454549 1.00021742325 0.999999927075\n"
]
}
],
"source": [
"min_max_mean(b_pp_csr)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"12"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"number_of_large_deviations(b_pp_csr)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"4.3797464984798747e-07"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"average_deviation(b_pp_csr)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### CSC"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 1.06 s, sys: 87.3 ms, total: 1.15 s\n",
"Wall time: 301 ms\n"
]
}
],
"source": [
"%time x_pp_csc = pypardiso_solve(cutoff33_tm_csc, b)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"b_pp_csc = cutoff33_tm @ x_pp_csc"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-233203236882.0 3.70904895921e+12 855055172.274\n"
]
}
],
"source": [
"min_max_mean(b_pp_csc)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1159"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"number_of_large_deviations(b_pp_csc)"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"976503407.96855581"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"average_deviation(b_pp_csc)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:umf]",
"language": "python",
"name": "conda-env-umf-py"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment