Skip to content

Instantly share code, notes, and snippets.

@TaylorOshan
Last active June 2, 2016 14:20
Show Gist options
  • Save TaylorOshan/47b2f66450c2f0122026a01cfa3f6a2b to your computer and use it in GitHub Desktop.
Save TaylorOshan/47b2f66450c2f0122026a01cfa3f6a2b to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"from scipy import sparse as sp\n",
"from pysal.spreg.utils import spdot\n",
"\n",
"import time \n",
"\n",
"def timeit(method):\n",
"\n",
" def timed(*args, **kw):\n",
" ts = time.time()\n",
" result = method(*args, **kw)\n",
" te = time.time()\n",
"\n",
" print '%2.2f sec' % \\\n",
" (te-ts)\n",
" return result\n",
"\n",
" return timed\n",
"\n",
"#a*b != np.dot(a,b) but (c*d).sum() == c.dot(d).sum()\n",
"#and c*d != d*c or c.dot(d) != d.dot(c)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"@timeit\n",
"def densedot(a,b):\n",
" return np.dot(a,b.T)\n",
"\n",
"@timeit\n",
"def sparsedot(a,b):\n",
" return a.dot(b.T)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#When sparse arrays are moderately sparse\n",
"a = np.random.randint(1,100, (3000,3000))\n",
"b = np.random.randint(1,100, (3000,3000))\n",
"c = sp.rand(3000,3000, .5)\n",
"d = sp.rand(3000, 3000, .5)\n"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"15.19 sec\n",
"67523117094780\n",
"11.85 sec\n",
"1688132086.31\n"
]
}
],
"source": [
"print np.sum(densedot(a,b)) #dense op with dense arrays\n",
"print densedot(c,d).sum() #dense op with sparse arrays"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"14.58 sec\n",
"67523117094780\n",
"11.81 sec\n",
"1688132086.31\n"
]
}
],
"source": [
"print np.sum(sparsedot(a,b)) #sparse op with dense arrays\n",
"print sparsedot(c,d).sum() #sparse op with sparse arrays"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"14.17 sec\n",
"13.97 sec\n",
"True\n",
"11.47 sec\n",
"11.55 sec\n",
"True\n"
]
}
],
"source": [
"print np.allclose(densedot(a,b),sparsedot(a,b))\n",
"print np.allclose(densedot(c,d).toarray(),sparsedot(c,d).toarray())"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#When sparse arrays are actually dense\n",
"c = sp.rand(3000,3000, .99)\n",
"d = sp.rand(3000, 3000, .99)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"14.73 sec\n",
"67523117094780\n",
"42.78 sec\n",
"6618433757.47\n"
]
}
],
"source": [
"print np.sum(densedot(a,b)) #dense op with dense arrays\n",
"print densedot(c,d).sum() #dense op with sparse arrays"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"14.83 sec\n",
"67523117094780\n",
"42.89 sec\n",
"6618433757.47\n"
]
}
],
"source": [
"print np.sum(sparsedot(a,b)) #sparse op with dense arrays\n",
"print sparsedot(c,d).sum() #sparse op with sparse arrays"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"15.88 sec\n",
"16.01 sec\n",
"True\n",
"45.83 sec\n",
"43.77 sec\n",
"True\n"
]
}
],
"source": [
"print np.allclose(densedot(a,b),sparsedot(a,b))\n",
"print np.allclose(densedot(c,d).toarray(),sparsedot(c,d).toarray())"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#When sparse arrays are very sparse\n",
"c = sp.rand(3000,3000, .1)\n",
"d = sp.rand(3000, 3000, .1)\n"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"14.71 sec\n",
"67523117094780\n",
"0.74 sec\n",
"67566516.6591\n"
]
}
],
"source": [
"print np.sum(densedot(a,b)) #dense op with dense arrays\n",
"print densedot(c,d).sum() #dense op with sparse arrays"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"14.45 sec\n",
"67523117094780\n",
"0.71 sec\n",
"67566516.6591\n"
]
}
],
"source": [
"print np.sum(sparsedot(a,b)) #sparse op with dense arrays\n",
"print sparsedot(c,d).sum() #sparse op with sparse arrays"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"14.44 sec\n",
"14.68 sec\n",
"True\n",
"0.76 sec\n",
"0.70 sec\n",
"True\n"
]
}
],
"source": [
"print np.allclose(densedot(a,b),sparsedot(a,b))\n",
"print np.allclose(densedot(c,d).toarray(),sparsedot(c,d).toarray())"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.9"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment