У меня есть функция gen()
, которая возвращает массив значений nElements
с плавающей точкой. Я ищу более Pythonic (один лайнер?) Способ сделать следующее:
a = zeros((nSamples, nElements))
for i in xrange(nSamples):
a[i,:] = gen()
Это один из способов сделать это:
a = array([gen() for i in xrange(nSamples)]).reshape((nSamples, nElements))
Но по понятным причинам он немного медленнее из-за того, что предварительно не выделяет массив numpy:
import time
from numpy import *
nSamples = 100000
nElements = 100
start = time.time()
a = array([gen() for i in xrange(nSamples)]).reshape((nSamples, nElements))
print (time.time() - start)
start = time.time()
a = zeros((numSamples, nElements))
for i in xrange(numSamples):
a[i,:] = gen()
print (time.time() - start)
Выход:
1.82166719437
0.502261161804
Итак, есть ли способ добиться того же однострочного, сохраняя предварительно выделенный массив для скорости?
Спасибо
-Nate