【发布时间】:2021-04-01 12:36:27
【问题描述】:
我有一个返回数组的函数,我想继续使用不同的参数调用该函数,然后在 for 循环过程中继续附加结果数组。现在,我只是定义一个列表并将新数组添加到列表中,然后将其全部堆叠在最后。这似乎效率很低。
这里是一个例子:这里我只是用 numpy random.rand 定义了一个数组来显示应该返回然后附加的数组的类型。
import numpy as np
total = 3
rows = 3
my_list = []
for i in range(total):
output_array = np.random.rand(rows,2) # this could be variable
my_list.append(output_array)
final_array = np.vstack(my_list)
有没有更有效的方法来做到这一点,这样我就可以直接附加到数组并在最后得到最终的完整数组?问题是我不知道循环遍历列表的预定次数,所以我不能使用连接等。
【问题讨论】:
-
为什么您认为列表追加效率低下?您了解如何将事物添加到列表中吗?或者数组不能以同样的方式增长?
-
"现在,我只是定义一个列表并将新数组添加到列表中,然后将其全部堆叠在最后。这似乎非常低效。"不,这实际上是执行此操作的有效方式。你不能
.append就地数组,它是 一个数组 而不是一个列表。所以numpy.ndarray.append创建了一个新数组,但这会迫使您使用二次时间算法。您的列表方法是线性时间。 -
@Pygirl 这完全等同于他们已经在做的事情......
-
@hpaulj:不,我并没有说如果有效的话,可以追加列表。我只是提出了一个建议,让它更 Pythonic。我想不出任何改进,因为 itertools.chain 不会优化。我想这很好。
-
@Pygirl,实际上创建数组的函数可能足够复杂,以至于追加循环和列表理解之间的时间差异很小。 OP 正在寻找能够以更高效率“增长”数组的东西(没有)。