我有一个类似这样的函数:
def Function(x):
a = random.random()
b = random.random()
c = OtherFunctionThatReturnsAThreeColumnArray()
results = np.zeros((1,5))
results[0,0] = a
results[0,1] = b
results[0,2] = c[-1,0]
results[0,3] = c[-1,1]
results[0,4] = c[-1,2]
return results
我要做的是多次运行这个函数,将返回的一行五列结果附加到正在运行的数据集中。但据我所知,append函数和for循环都是非常低效的,我都在努力改进代码,而且运行的次数将足够多,这种低效对我没有任何好处。你知道吗
最好的方法是什么,以使其产生的开销最少:
您正确地认为
numpy.append
或numpy.concatenate
如果重复多次会很昂贵(这与numpy为前两个数组声明一个新数组有关)。你知道吗最好的建议(如果您知道总共需要多少空间)是在运行例程之前声明,然后在结果可用时将其放置到位。你知道吗
如果要运行
nrows
次,那么然后添加结果
当然,如果你不知道你要运行多少次这个函数,这就行不通了。在这种情况下,我建议采用不那么优雅的方法
声明一个可能很大的
results
数组并添加到results[i, x]
中,如上所述(跟踪i
和结果的大小。当达到
results
大小时,对新数组执行numpy.append
(或concatenate
)。这比重复追加要好得多,而且不会破坏性能,但是您必须编写一些包装器代码。你还有其他的想法可以追求。从我头上你可以
将结果写入磁盘,这取决于
OtherFunctionThatReturnsAThreeColumnArray
的速度和数据的大小这可能不是一个太愚蠢的想法。将结果保存在列表中(直到运行之后才忘记
numpy
)。If函数返回(a,b,c)not results;results = [function(x) for x in my_data]
现在做一些洗牌,把结果转换成你需要的形式。你知道吗
相关问题 更多 >
编程相关推荐