程序在创建大型numpy数组时冻结



我正在做一个基于Tkinter的项目,其中数组大小有时可以高达10^9甚至更多(尽管更多的可能性很小(
早些时候,我使用了一个使用循环的简单数组,但在大小为10^6或更大的数组中花费了很多时间,所以我决定将我的方法切换到NumPy,在大多数情况下,它给出了更好的结果,但在上述条件下(大小>=10^9(,程序只是冻结(有时甚至计算机也会冻结,除了强制重新启动之外没有其他选择(,与简单的循环方法不同的是,即使列表的大小更大,也会产生结果,但这需要花费大量时间
我看了这个,但它涉及到诸如使用堆内存、堆栈大小之类的术语,我对这些东西知之甚少。

我不太习惯堆叠平台,所以任何建议都将不胜感激。

更新:我正在添加一块代码,我试图用numpy列表替换正常列表。注释行是我之前在简单列表中使用的行。

def generate(self):
# t is number of times we need to generate this list
for i in range(self.t):
self.n = randint(self.n_min, self.n_max)  # constraints
# self.a = [0] * self.n
self.a = np.random.randint(low=self.a_min, high=self.a_max, size=self.n)
# for j in range(self.n):
#     self.a[j] = randint(self.a_min, self.a_max)

然后在Tkinter GUI的输出屏幕中插入所有这些值,
此处"n",即NumPy数组的大小有时会取非常高的值。

我使用双启动(win+ubuntu(,目前在ubuntu上面临的情况是,我分配了500 GB的存储空间,我的笔记本电脑的RAM是8 GB。

对于numpy中的1e9元素float64数组,很可能内存不足,仅8GB。同样,如果你天真地在这个数组上循环(类似于(:

for item in big_numpy_arrray: 
do_something(item)

这将需要很长时间。避免这样做,尽可能使用numpy的矢量运算。

最新更新