相关疑难解决方法(0)

我应该使用Python 32位还是Python 64位

我有一个win7 64位安装.我必须使用Python 64bit吗?32位和64位Python版本之间有什么区别?不同的Python包(例如south,django,mysqldb等)是否只支持32bit\64bit?

python 32bit-64bit

126
推荐指数
4
解决办法
13万
查看次数

64位窗口上的Python 32位内存限制

我遇到了一个我似乎无法理解的记忆问题.

我在Windows 7 64位机器上运行8GB内存并运行32位python程序.

这些程序读取了5,118个压缩的numpy文件(npz).Windows报告磁盘上的文件占用1.98 GB

每个npz文件包含两个数据:'arr_0'的类型为np.float32,'arr_1'的类型为np.uint8

python脚本读取每个文件将其数据附加到两个列表中,然后关闭该文件.

在文件4284/5118周围,程序抛出一个MemoryException

但是,任务管理器说发生错误时python.exe*32的内存使用量是1,854,848K~ = 1.8GB.远低于我的8 GB限制,或者假定的32位程序的4GB限制.

在程序中我捕获内存错误并报告:每个列表的长度为4285.第一个列表包含总共1,928,588,480个float32的〜= 229.9 MB的数据.第二个列表包含12,342,966,272 uint8的〜= 1,471.3MB数据.

所以,一切似乎都在检查.除了我得到内存错误的部分.我绝对有更多的内存,它崩溃的文件大约是800KB,因此读取一个巨大的文件并没有失败.

此外,该文件未损坏.如果我事先没有耗尽所有的记忆,我可以读得很好.

为了让事情变得更加混乱,所有这一切似乎在我的Linux机器上运行良好(虽然它确实有16GB的内存,而不是我的Windows机器上的8GB),但是,它似乎并不是机器的RAM.造成这个问题.

为什么Python会抛出内存错误,当我预计它应该能够分配另外2GB的数据?

python memory windows file-io numpy

19
推荐指数
1
解决办法
2万
查看次数

为什么这个numpy数组太大而无法加载?

我有一个3.374Gb的npz文件myfile.npz.

我可以阅读它并查看文件名:

a = np.load('myfile.npz')
a.files
Run Code Online (Sandbox Code Playgroud)

['arr_1','arr_0']
Run Code Online (Sandbox Code Playgroud)

我可以在'arr_1'中读到

a1=a['arr_1']
Run Code Online (Sandbox Code Playgroud)

但是,我无法加载arr_0或读取其形状:

a1=a['arr_0']
a['arr_0'].shape
Run Code Online (Sandbox Code Playgroud)

上述两个操作都会出现以下错误:

ValueError: array is too big
Run Code Online (Sandbox Code Playgroud)

我有16Gb RAM,其中8.370Gb可用.所以问题似乎与记忆无关.我的问题是:

  1. 我应该能够阅读此文件吗?

  2. 谁能解释这个错误?

  3. 我一直在寻找使用np.memmap来解决这个问题 - 这是一种合理的方法吗?

  4. 我应该使用什么调试方法?

编辑:

我可以访问具有更多RAM(48GB)的计算机并加载它.在dtype实际上complex128和未压缩的内存a['arr_0']是5750784000个字节.似乎可能需要RAM开销.无论是那个或我预测的可用内存量是错误的(我使用了Windows sysinternals RAMmap).

python file-io numpy

12
推荐指数
1
解决办法
4665
查看次数

标签 统计

python ×3

file-io ×2

numpy ×2

32bit-64bit ×1

memory ×1

windows ×1