Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 程序在创建大型numpy阵列时冻结_Python_Python 3.x_List_Numpy_Tkinter - Fatal编程技术网

Python 程序在创建大型numpy阵列时冻结

Python 程序在创建大型numpy阵列时冻结,python,python-3.x,list,numpy,tkinter,Python,Python 3.x,List,Numpy,Tkinter,我正在做一个基于Tkinter的项目,其中数组大小有时会高达10^9甚至更多(尽管增加的可能性非常小)。 早些时候,我使用了一个使用循环的简单数组,但在大小为10^6或更大的数组中花费了大量时间,因此我决定将我的方法切换到NumPy,在大多数情况下,它会给出更好的结果,但在上述条件下(大小>=10^9),程序会冻结(有时,即使是计算机也会冻结,除了强制重新启动之外,没有其他选择),这与简单的循环方法不同,这种方法即使对于较大的列表,也会产生结果,但是需要花费大量的时间。 我看了一下,但它涉及到一

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

我不太习惯stack平台,因此任何建议都将不胜感激

更新:我正在添加一段代码,尝试用numpy-one替换普通列表。注释行是我前面使用的简单列表

def生成(自):
#t是生成此列表所需的次数
对于范围内的i(self.t):
self.n=randint(self.n_min,self.n_max)#约束
#self.a=[0]*self.n
self.a=np.random.randint(低=self.a_min,高=self.a_max,大小=self.n)
#对于范围内的j(自身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数组,很可能是8 GB。另外,如果您天真地在该数组上循环(类似于):


这将花费很长时间。避免这样做,并尽可能使用numpy的向量运算。

查看导致问题的代码以及了解计算机中的内存量会很有帮助。此外,请在“我已添加导致问题的代码段”中查看和查看有关提问的其他页面。谢谢adding对于额外的资源,我会尽量遵守这些指导原则。实际上,我所需要做的就是生成该数组并将其插入到输出小部件中,在该数组上循环肯定会花费大量时间。我仍在学习NumPy,并不熟悉它的所有方法。我已经添加了我的笔记本电脑规格,如果这有助于pin指向t的话他提出了一个问题。是的,对于8GB的RAM,您的内存库已经用完了,那么我有什么可能的替代方案,以便在如此大的阵列中与numpy一样快。我读过关于使用堆内存的内容,但不清楚如何做。
for item in big_numpy_arrray: 
   do_something(item)