Andreas Geiges
2018-02-15 16:19:40 UTC
Dear Igraph users,
I am using python-igraph in python2.7 in combination with numpy.
I need to speed up the following scenario and was wondering if someone
can give my some hints.
I have a large graph with several thousands of vertices.
One property of the vertices is a one-dimensional numpy array ( e.g.
array([0,0,0,0]) )
If I read out the property of one vertice, I get the numpy array
directly back, no conversion needed.
But if I read the property of an vertice sequence, I get a list of
array, which is perfectly fine.
BUT I like to have the data as a 2D-array in numpy, thus I need to use
numpy.asarray() which cause an overhead, which
cost me a lost of computing time form many of this operation.
Thus, I was wondering if there is a way, to directly receive a 2D-array
back from igraph, when using a sequence.
I think this is not possible right now, but maybe it can be implemented.
I would be willing to try that, but I would need some hints, where to start.
The following code is maybe demonstrating better what I want to accomplish:
######################################
import igraph as ig
import numpy as np
from timeit import timeit as ti
#%% Setup
graph = ig.Graph()
nVert = 1000
graph.add_vertices(nVert)
for vertice in graph.vs:
vertice['property'] = np.random.random(5)
#print vertice
#creation of a arbitray sequence
vertexSequence = graph.vs[np.arange(0,nVert,5).tolist()]
#%% reading the properties of a sequence to an numpy array
#first possiblity using asarray
%timeit numpyArray2D =
np.asarray(vertexSequence['property'],dtype=np.float64)
#second possiblity with pre-allocated array and numpy view
numpyArray2D = np.zeros([len(vertexSequence),5])
%timeit numpyArray2D[:] = vertexSequence['property']
######################################
Any help or comments are welcome. Thanks a lot in advance!!!
Best,
Andreas
I am using python-igraph in python2.7 in combination with numpy.
I need to speed up the following scenario and was wondering if someone
can give my some hints.
I have a large graph with several thousands of vertices.
One property of the vertices is a one-dimensional numpy array ( e.g.
array([0,0,0,0]) )
If I read out the property of one vertice, I get the numpy array
directly back, no conversion needed.
But if I read the property of an vertice sequence, I get a list of
array, which is perfectly fine.
BUT I like to have the data as a 2D-array in numpy, thus I need to use
numpy.asarray() which cause an overhead, which
cost me a lost of computing time form many of this operation.
Thus, I was wondering if there is a way, to directly receive a 2D-array
back from igraph, when using a sequence.
I think this is not possible right now, but maybe it can be implemented.
I would be willing to try that, but I would need some hints, where to start.
The following code is maybe demonstrating better what I want to accomplish:
######################################
import igraph as ig
import numpy as np
from timeit import timeit as ti
#%% Setup
graph = ig.Graph()
nVert = 1000
graph.add_vertices(nVert)
for vertice in graph.vs:
vertice['property'] = np.random.random(5)
#print vertice
#creation of a arbitray sequence
vertexSequence = graph.vs[np.arange(0,nVert,5).tolist()]
#%% reading the properties of a sequence to an numpy array
#first possiblity using asarray
%timeit numpyArray2D =
np.asarray(vertexSequence['property'],dtype=np.float64)
#second possiblity with pre-allocated array and numpy view
numpyArray2D = np.zeros([len(vertexSequence),5])
%timeit numpyArray2D[:] = vertexSequence['property']
######################################
Any help or comments are welcome. Thanks a lot in advance!!!
Best,
Andreas
--
Dr.-Ing. Andreas Geiges
Global Climate Forum (GCF)
Neue Promenade 6, D-10178 Berlin, Germany
http://www.globalclimateforum.org
Dr.-Ing. Andreas Geiges
Global Climate Forum (GCF)
Neue Promenade 6, D-10178 Berlin, Germany
http://www.globalclimateforum.org