Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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 MemoryError vs";ValueError:数组太大“;在不同的计算机上分配大数据阵列时_Python_Arrays_Numpy_Memory_Memory Management - Fatal编程技术网

Python MemoryError vs";ValueError:数组太大“;在不同的计算机上分配大数据阵列时

Python MemoryError vs";ValueError:数组太大“;在不同的计算机上分配大数据阵列时,python,arrays,numpy,memory,memory-management,Python,Arrays,Numpy,Memory,Memory Management,我在MacBook Air-mid-2013(笔记本电脑1)和ThinkPad X1-Yoga 3G(笔记本电脑2)两个独立的设备上运行Python,并在这两个设备上创建numpy阵列。尽管两台笔记本电脑的内存相对相似: 笔记本电脑1:内存4 GB 1600 MHz DDR3 笔记本电脑2:安装的RAM 16.0 GB(可用15.8 GB) 在观察到内存错误之前,我发现两台笔记本电脑上的阈值数组大小相差很大。例如: 笔记本电脑1 >>> import numpy as np &

我在MacBook Air-mid-2013(笔记本电脑1)和ThinkPad X1-Yoga 3G(笔记本电脑2)两个独立的设备上运行Python,并在这两个设备上创建numpy阵列。尽管两台笔记本电脑的内存相对相似:

笔记本电脑1:内存4 GB 1600 MHz DDR3

笔记本电脑2:安装的RAM 16.0 GB(可用15.8 GB)

在观察到
内存错误之前,我发现两台笔记本电脑上的阈值数组大小相差很大。例如:

笔记本电脑1

>>> import numpy as np
>>> np.zeros(int(5.*10.**12))
array([0., 0., 0., ..., 0., 0., 0.])
>>> np.zeros(int(6.*10.**12))
Python(6138,0x7fffda9413c0) malloc: *** mach_vm_map(size=48000000000000) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
MemoryError
>>将numpy作为np导入
>>>np.零(整数(5.*10.*12))
数组([0,0,0.,…,0,0,0.]))
>>>np.零(整数(6.*10.*12))
Python(6138,0x7fffda9413c0)malloc:**mach_vm_映射(大小=4800000000000)失败(错误代码=3)
***错误:无法分配区域
***在malloc\u error\u break中设置断点以进行调试
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
记忆者
笔记本电脑2

>>> import numpy as np
>>> np.zeros(int(1.*10.**8.))
array([0., 0., 0., ..., 0., 0., 0.])
>>> np.zeros(int(5.*10.**8.))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: array is too big; `arr.size * arr.dtype.itemsize` is larger than the maximum possible size.
>>> np.zeros(int(5.*10.**9.))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Maximum allowed dimension exceeded
>>> import numpy as np
>>> np.zeros(int(1.*10.**8.))
array([0., 0., 0., ..., 0., 0., 0.])
>>> np.zeros(int(5.*10.**8.))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: array is too big; `arr.size * arr.dtype.itemsize` is larger than the maximum possible size.
>>> np.zeros(int(5.*10.**9.))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Maximum allowed dimension exceeded
>>将numpy作为np导入
>>>np.零(整数(1.*10.*8.))
数组([0,0,0.,…,0,0,0.]))
>>>np.零(整数(5.*10.*8.))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:数组太大`arr.size*arr.dtype.itemsize`大于最大可能大小。
>>>np.零(整数(5.*10.*9.))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:超出了允许的最大尺寸
>>>将numpy作为np导入
>>>np.零(整数(1.*10.*8.))
数组([0,0,0.,…,0,0,0.]))
>>>np.零(整数(5.*10.*8.))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:数组太大`arr.size*arr.dtype.itemsize`大于最大可能大小。
>>>np.零(整数(5.*10.*9.))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:超出了允许的最大尺寸
Linux:

Python 3.6.7 |Anaconda, Inc.| (default, Oct 23 2018, 19:16:44) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.zeros(int(5.*10.**8))
array([0., 0., 0., ..., 0., 0., 0.])
>>> np.zeros(int(5.*10.**9))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
MemoryError
Python 3.6.7 | Anaconda,Inc.|(默认,2018年10月23日,19:16:44)
linux上的[GCC 7.3.0]
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>将numpy作为np导入
>>>np.零(整数(5.*10.*8))
数组([0,0,0.,…,0,0,0.]))
>>>np.零(整数(5.*10.*9))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
记忆者
因此,在收到
内存错误之前,长度(约)5万亿的数组似乎是笔记本电脑1的极限,而笔记本电脑2的阈值接近5亿。这本质上是4个数量级的差异,但每台笔记本电脑上的可用内存几乎没有那么大的差异。我还尝试在两台Linux机器上创建类似的阵列,每台机器大约有4GB的RAM,并观察到长度大约为10亿


我显然遗漏了一些可能很明显的东西。如果能澄清为什么会出现这种差异,我们将不胜感激

因为您得到了
ValueError:数组太大;arr.size*arr.dtype.itemsize大于最大可能大小。
而不是第二台计算机上的
MemoryError
,原因必须是Python或numpy在该计算机上的架构限制,而不是系统内存限制


最可能的情况是,您在第二台机器上使用的是32位Python:显示了这一点。

谢谢您的输入。我还包括了一个观察到
MemoryError
的附加示例。