【问题标题】:Importing numpy array into R using rPython package使用 rPython 包将 numpy 数组导入 R
【发布时间】:2015-09-22 01:56:40
【问题描述】:

在 pycharm 中,我有按预期工作的代码。有一个函数在调用时会返回一个 numpy 数组。

我想将该数组放入 RStudio 的环境中,例如数据框或任何真正作为起点的东西。

这是我的简单代码

library(RJSONIO)
library(rPython)
locTest <-"/home/cornelis/Downloads/M1302000139_1442697993.722772.raw"
x<-python.call("get_frames",locTest,256,256)

这是输出。 RStudio 控制台中显示的 numpy 数组是正确的,但它告诉我它不是 JSON 可序列化的。我也意识到包 rPython 的 documentation 没有将 python.call 分配给任何东西,但我不知道如何将 Python 函数调用的返回值分配给 R 中的变量(文档有点薄,但希望我只是没有找对地方)

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/json/__init__.py", line 243, in dumps
    return _default_encoder.encode(obj)
  File "/usr/lib/python2.7/json/encoder.py", line 207, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib/python2.7/json/encoder.py", line 270, in iterencode
    return _iterencode(o, 0)
  File "/usr/lib/python2.7/json/encoder.py", line 184, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: array([[[ 14.,  15.,  15., ...,   2.,   3.,   3.],
        [ 14.,  15.,  15., ...,   3.,   3.,   3.],
        [ 14.,  13.,  13., ...,   2.,   2.,   3.],
        ..., 
        [  2.,   2.,   2., ...,   1.,   1.,   1.],
        [  2.,   2.,   3., ...,   1.,   1.,   1.],
        [  3.,   4.,   3., ...,   1.,   1.,   2.]],

       [[ 11.,  13.,  13., ...,   3.,   3.,   3.],
        [ 11.,  11.,  12., ...,   3.,   3.,   3.],
        [ 11.,  11.,  10., ...,   2.,   3.,   4.],
        ..., 
        [  1.,   2.,   3., ...,   1.,   1.,   1.],
        [  1.,   3.,   2., ...,   1.,   1.,   1.],
        [  2.,   2.,   2., ...,   1.,   1.,   1.]],

       [[ 12.,  13.,  14., ...,   4.,   3.,   3.],
        [ 12.,  11.,  11., ...,   3.,   4.,   4.],
        [ 11.,  11.,   9., ...,   3.,   4.,   3.],
        ..., 
        [  1.,   2.,   2., ...,   1.,   1.,   1.],
        [  2.,   2.,   2., ...,   1.,   1.,   1.],
        [  2.,   2.,   3., ...,   2.,   1.,   1.]],

       ..., 
       [[ 74.,  77.,  78., ...,  88.,  89.,  89.],
        [ 77.,  78.,  76., ...,  89.,  89.,  88.],
        [ 79.,  78.,  77., ...,  89.,  87.,  88.],
        ..., 
        [ 39.,  38.,  34., ...,  56.,  56.,  53.],
        [ 38.,  39.,  35., ...,  55.,  56.,  55.],
        [ 36.,  38.,  36., ...,  55.,  56.,  58.]],

       [[ 81.,  79.,  79., ...,  93.,  91.,  92.],
        [ 79.,  78.,  78., ...,  91.,  93.,  91.],
        [ 78.,  78.,  78., ...,  89.,  90.,  88.],
        ..., 
        [ 39.,  37.,  35., ...,  59.,  57.,  55.],
        [ 37.,  35.,  36., ...,  59.,  59.,  57.],
        [ 38.,  38.,  37., ...,  56.,  60.,  61.]],

       [[ 79.,  79.,  79., ...,  89.,  90.,  91.],
        [ 77.,  78.,  78., ...,  89.,  89.,  88.],
        [ 77.,  77.,  76., ...,  88.,  86.,  86.],
        ..., 
        [ 40.,  36.,  33., ...,  59.,  58.,  59.],
        [ 36.,  35.,  33., ...,  58.,  58.,  57.],
        [ 35.,  36.,  36., ...,  59.,  57.,  58.]]], dtype=float32) is not JSON serializable
Error in python.get("_r_call_return") : Variable not found

following is the only related question I could find

【问题讨论】:

    标签: python json r numpy


    【解决方案1】:

    我最终需要更改 python 代码,以便将 numpy 数组转换为列表。

    在与一位同事混在一起并眯着眼睛看文档几个小时后,结果发现我还需要在 python.call 之前有 python.load

    以下作品

    > library(RJSONIO)
    > library(rPython)
    > python.load("/home/cornelis/PycharmProjects/TestProject/TestScript.py")
    > firstFrame_raw<-python.call("get_frames","/home/cornelis/Downloads/M1302000139_1442697993.722772.raw",256,256)
    > firstFrame_raw
    ...
    [[2]][[46]]
      [1]   7   8   7   7   7   5   7   6   6   6   5   5   5   5   5   4   6   5   6   5   4   4   4   4
     [25]   3   3   4   4   4   4   4   4   4   3   3   2   2   2   2   2   2   2   1   1   1   1   0   1
     [49]   2   1   1   2   2   2   2   1   3   3   3   4   4   3   4   4   6   1
    ...
    

    【讨论】:

      【解决方案2】:

      看起来有一个新的 R 包,叫做“reticulate”,它似乎比 rPython 更强大。

      https://rstudio.github.io/reticulate/articles/calling_python.html

      特别是,文档中说“R 矩阵和数组会自动与 NumPy 数组相互转换”,函数调用看起来非常简单。

      【讨论】:

        猜你喜欢
        • 2018-10-14
        • 1970-01-01
        • 2017-08-06
        • 1970-01-01
        • 2013-02-15
        • 1970-01-01
        • 2012-01-07
        • 2018-01-02
        • 2018-05-04
        相关资源
        最近更新 更多