【问题标题】:Memory Error when trying to load an R object file into a python numpy array尝试将 R 对象文件加载到 python numpy 数组中时出现内存错误
【发布时间】:2023-03-09 00:49:01
【问题描述】:

我有一个 R 对象 (.rda) 文件,我想将它加载到 python 中的一个 numpy 数组中。不幸的是,下面的代码产生了一个MemoryError,我似乎无法深入了解。

import numpy as np
import rpy2.robjects as robjects

robjects.r['load']('myrobject.rda')
rils = np.array(robjects.r['myobjectname'])

该错误是在代码的最底线引发的,因此问题是将对象转换为 numpy 数组,而不是加载对象。数据主要是介于 0 和 1 之间的一到三位浮点数,但其中也有一些字符。

我的机器运行 64 位版本的 Ubuntu 16.04 并运行 python 3.5.2 64 位,因此运行 32 位任何东西在这里都不是问题,因为它已经与我看到的相关帖子一样。我有 16 GB 的 RAM。当我使用htop 查看这段代码执行期间的内存使用情况时,它会逐渐增加到大约 4.5 GB,然后退出并抛出错误。

我尝试加载的对象大小为 113.7MB,但我的理解是 .rda 文件已压缩。

我以前从未见过这样的错误,如果能帮助我找出导致它的原因以及我应该做些什么来解决它,我将不胜感激。

编辑

既然有人问我,这里就是确切的错误。

Traceback (most recent call last):
  File "rils_ga.py", line 10, in <module>
    rils = np.array(robjects.r['Aprobma'])
MemoryError

Aprobma 对应于我在原帖中使用的myobjectname

【问题讨论】:

  • @Benjamin 否。据我所知,rpy2 加载的工作方式类似于 load() 在 R 中的工作方式。它只是将加载的对象放入环境中,而无需为它分配变量。运行您建议的命令会打印矩阵。
  • @Benjamin 它返回&lt;class 'rpy2.robjects.vectors.DataFrame'&gt;
  • 抛出的确切错误是什么?
  • @Benjamin 我已经编辑了帖子以包含该信息。

标签: python numpy memory rpy2


【解决方案1】:

如果错误只发生在该行

rils = np.array(robjects.r['Aprobma'])

这似乎表明对象已从.rda 文件中成功加载。在这里,您将至少复制 R 对象中的数据,以创建一个 numpy 数组(在执行转换时加上最终的临时对象)。您是否尝试过使用asarray 来避免重复(参见https://rpy2.github.io/doc/v2.9.x/html/numpy.html#from-rpy2-to-numpy)?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2014-07-28
    • 2015-04-14
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    相关资源
    最近更新 更多