[Numpy-discussion] fastest way to make two vectors into an array
John Hunter
jdhunter at ace.bsd.uchicago.edu
Thu Jan 30 11:26:05 EST 2003
>>>>> "John" == John Hunter <jdhunter at ace.bsd.uchicago.edu> writes:
John> I have two equal length 1D arrays of 256-4096 complex or
John> floating point numbers which I need to put into a
John> shape=(len(x),2) array.
John> I need to do this a lot, so I would like to use the most
John> efficient means. Currently I am doing:
I tested all the suggested methods and the transpose with [x] and [y]
was the clear winner, with an 8 fold speed up over my original code.
The concatenate method was between 2-3 times faster.
Thanks to all who responded,
John Hunter
cruncher2:~/python/test> python test.py test_naive
test_naive 0.480427026749
cruncher2:~/python/test> python test.py test_concat
test_concat 0.189149975777
cruncher2:~/python/test> python test.py test_transpose
test_transpose 0.0698409080505
from Numeric import transpose, concatenate, reshape, array, zeros
from RandomArray import normal
import time, sys
def test_naive(x,y):
"Naive approach"
X = zeros( (len(x),2), typecode=x.typecode())
X[:,0] = x
X[:,1] = y
def test_concat(x,y):
"Thanks to Chris Barker and Bryan Cole"
X = concatenate( ( reshape(x,(-1,1)), reshape(y,(-1,1)) ), 1)
def test_transpose(x,y):
"Thanks to Joachim Saul"
X = transpose(array([x]+[y]))
m = {'test_naive' : test_naive,
'test_concat' : test_concat,
'test_transpose' : test_transpose}
nse1 = normal(0.0, 1.0, (4096,))
nse2 = normal(0.0, 1.0, nse1.shape)
N = 1000
trials = range(N)
func = m[sys.argv[1]]
t1 = time.time()
for i in trials:
func(nse1,nse2)
t2 = time.time()
print sys.argv[1], t2-t1
More information about the NumPy-Discussion
mailing list