当前位置: 首页 > 面试题库 >

内存错误和列表限制?

段干庆
2023-03-14
问题内容

为了科学目的,我需要产生越来越大的(非常)矩阵(马尔可夫链)。我执行微积分,将其放入20301个元素的列表中(=矩阵的一行)。我需要将所有这些数据存储在内存中以继续进行下一步的马尔可夫步骤,但是如果需要,我可以将它们存储在其他位置(例如文件),即使这会减慢我的马尔可夫链的遍历速度。我的电脑(科学实验室):双氙气6个内核/
12个线程,12GB内存,操作系统:win64

  Traceback (most recent call last):
  File "my_file.py", line 247, in <module>
    ListTemp.append(calculus)
MemoryError

微积分结果示例:9.233747520008198e-102(是,超过1/9000)

存储第19766个元素时会引发错误:

ListTemp[19766]
1.4509421012263216e-103

如果我走得更远

Traceback (most recent call last):
  File "<pyshell#21>", line 1, in <module>
    ListTemp[19767]
IndexError: list index out of range

因此,此列表在19767循环中发生了内存错误。

  1. 列表有内存限制吗?是“按列表限制”还是“按脚本全局限制”?

  2. 如何绕过那些限制?有什么想法吗?

  3. 使用numpy,python64是否有帮助?它们的内存限制是多少?那其他语言呢?


问题答案:

首先,请参阅 Python数组可以达到多大?和Numpy,长数组问题

其次,唯一的实际限制来自您拥有的内存量以及系统存储内存引用的方式。没有每个列表的限制,因此Python会一直运行直到内存耗尽。两种可能性:

  1. 如果您在较旧的操作系统上运行,或者在迫使进程使用有限数量的内存的操作系统上运行,则可能需要增加Python进程可以访问的内存数量。
  2. 使用分块将列表分开。例如,执行列表的前1000个元素,腌制并将其保存到磁盘,然后再执行下1000个。要使用它们,请一次释放一个块,以免耗尽内存。从本质上讲,这与数据库用于处理超过RAM中容纳的更多数据的技术相同。


 类似资料:
  • 当我尝试使用Composer客户端将软件包安装到Contao时,我收到一个错误: 致命错误:第220行的phar://D:/wamp/www/myproject/composer/composer.phar/src/composer/dependencysolver/Solver.php中允许的内存大小为1073741824字节(尝试分配134217728字节) 我真的很困惑。我的PHP内存限制设

  • 我使用ApacheFOP2.2生成PDF报告。每当有超过20K条记录时,我就会收到“内存不足错误:Java堆空间”错误。我尝试增加页面序列的数量,这提高了性能,但当将超过20K条记录的XML转换为PDF时,仍然会出现内存不足的错误。在没有多页序列的情况下,仅成功转换了2K条记录。下面是使用的XML结构和XSL模板。 要求是生成至少75K记录的PDF(取决于数据库数据)。请建议如何修改XSL-FO模

  • 我正在开发一个应用程序,使用谷歌应用程序引擎的付费服务。在应用程序中,我正在解析一个大型xml文件,并试图将数据提取到数据存储中。但在执行此任务时,GAE向我抛出了一个错误,如下所示 我还试图通过将前端实例类从F1增加到F2来更改性能设置。 错误:在为总共14个请求提供服务后,超过了128 MB的软私有内存限制,为133 MB。处理此请求后,发现处理此请求的进程占用了太多内存,因此被终止。这可能会

  • 错误码 描述 排查方向 0 请求成功 2 参数错误 检查必填字段; get/post 参数位置 -6 身份验证失败 access_token 是否有效; 部分接口需要申请对应的网盘权限 31034 命中接口频控 核对频控规则; 稍后再试; 申请单独频控规则 42000 访问过于频繁 42001 rand校验失败 42999 功能下线 9100 一级封禁 9200 二级封禁 9300 三级封禁 94

  • 请我想知道如何解决这个问题。当我试图构建签名apk时就会发生这种情况。

  • 问题内容: python的内存有限制吗?我一直在使用python脚本从最小150mb大的文件中计算平均值。 根据文件的大小,我有时会遇到一个。 可以为python分配更多的内存,这样我就不会遇到错误吗? 编辑:下面的代码 注意:文件大小可能相差很大(最大20GB),文件的最小大小为150mb 问题答案: (这是我的第三个答案,因为我误解了您的代码在原始代码中所做的事情,然后在第二个错误中犯了一个小

  • 我已经能够将PostgreSQL链接到Java。我已经能够显示表中的所有记录,但我无法执行删除操作。 下面是我的代码: 请注意,MAC是一个字符串字段,用大写字母书写。表中确实存在此字段。 我得到的错误是: 严重:错误:“Mac”列不存在

  • 问题内容: 当我尝试运行以下程序时,出现了以上错误。有人可以解释什么是内存错误,以及如何解决此问题?。 该程序将字符串作为输入,并找到所有可能的子字符串,并从中创建一个集(按字典顺序),并应在用户要求的相应索引处打印值,否则应打印“无效” 问题答案: 这一个在这里: 对于大型字符串,这似乎非常低效且昂贵。 做得更好 缓冲区对象保留对原始字符串以及开始和长度属性的引用。这样,不会发生不必要的数据重复