python - 如何将列表附加到空的 numpy 数组

标签 python arrays list numpy

我有一个功能,每次迭代都会获取元素并将其附加到列表中。在一定次数的迭代(例如 100 万次)结束时,我想将列表附加到 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

如何在每 100 万次迭代后继续将列表 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是一个链表,这意味着一旦有新元素出现,我们不必为整个容器重新分配内存。

关于python - 如何将列表附加到空的 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30284800/

相关文章:

python - 具有许多离散特征的机器学习数据集

python - 无限的本地错误 Python

arrays - 如何从Flutter中的另一个类访问/调用数组(列表)数据?

python - 重新排序字典列表的更好方法?

python - 安装pypiwin32后不满足pywin32要求

python - 暂停 Python 程序的正确方法

python(numpy) -- 生成数组的另一种方法(从另一个数组)

javascript - 使用 map 函数在 JavaScript 中创建关联数组

Python大列表错误

c# - 使用linq确定ListB中是否存在ListA的任何元素?