我有一个功能,可以在每次迭代时提取元素并将其附加到列表中。在一定数量的迭代(例如一百万次)结束时,我想将列表追加到numpy数组中,然后清空列表并继续该过程。
我已声明一个空的numpy数组为
a= np.array([], dtype="int32")
b =[1,2,3,4] is my list for first 1 million iteration,
b =[5,4,3,2] is the list for second 1 million iteration
在每百万次迭代后,如何继续将列表b追加到numpy数组a。
我需要如下输出
array([[1, 2, 3, 4],
[5, 4, 3, 2]])
我已经尝试过“ concatenate”和“ vstack”,但是问题是a(当为空)和b的尺寸不匹配,因此代码给出了错误。
列表将多达100万,因此需要一种经济高效的方法来处理附录。我也可以为每个迭代“添加vstack”元素,但是每次我使用vstack时都会加载庞大的列表,这不会节省成本。我尝试了下面的代码,它工作正常,但我想避免在每次迭代时进行检查。
if any(a):
a=np.vstack((a,b))
else:
a=np.append(a,b, axis=0)
有什么办法可以在不执行检查的情况下将列表追加到numpy数组。
我建议不要追加到数组,因为这样可能会非常低效。取而代之的是,您可以使用它deque
来收集列表,并仅在需要时才使用该列表创建一个数组。这是一个例子:
from collections import deque
import numpy as np
lists = deque()
for i in range(1, 13, 4):
lists.append(range(i, i + 4))
result = np.array(lists)
现在我们有
>>> result
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
deque
是一个链表,这意味着一旦出现新元素,我们就不必为整个容器重新分配内存。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句