【问题标题】:Octave isnan: not defined error using oct2pyOctave isnan:使用 oct2py 未定义错误
【发布时间】:2019-03-25 23:03:52
【问题描述】:

使用 oct2py 在几个 (10MM+) 大小的数据帧上调用 corrcoef.m 以返回 [R,P] 矩阵,从而为 ML 算法生成训练集。昨天,我有这个工作没问题。今天早上从顶部运行脚本,返回一个相同的测试集通过 oct2py 传递给 Octave。

我被退回:

Oct2PyError: Octave evaluation error:
error: isnan: not defined for cell
error: called from:
corrcoef at line 152, column 5
CorrCoefScript at line 1, column 7

首先,集合中没有 null/nan 值。事实上,甚至没有任何零。任何列中都没有统一性,因此在 corrcoef 计算中没有返回标准偏差。这在数学上是合理的。

其次,当我通过 GUI 将测试集加载到 Octave 并在相同数据上执行相同的 .m 时,不会返回任何错误,并且 [R,P] 矩阵与昨晚保存的输出相同。我测试了矩阵 var 是否通过 oct2py 正确传递给 Octave,并且 Octave 正在接收相同的矩阵。但是,oct2py 不能再通过源代码中的 nan 检查来执行 ANY .m。对于任何包含 .isnan 的 Octave 打包 .m 脚本,都会返回上述错误。

对于 s&g,我修改了我的 .m 以接收矩阵 var 并将其写入一个平面文件,如下所示:

csvwrite ('filename', data);

这也会失败并出现 fprintf 错误;如果我在 Octave GUI 内的同一数据集上运行相同的代码,则可以正常工作。

我在这里不知所措。我用相同的结果更新了 conda、oct2py 和 Octave。同样,具有确切数据的确切代码在不到 24 小时前运行的行为与预期一致。

我在 Jupyter Notebook 中使用下面的代码进行测试:

%env OCTAVE_EXECUTABLE = F:\Octave\Octave-5.1.0.0\mingw32\bin\octave-cli-5.1.0.exe
import oct2py
from oct2py import octave

octave.addpath('F:\\FinanceServer\\Python\\Secondary Docs\\autotesting\\atOctave_Scripts');
data = x
octave.push('data',data)
octave.eval('CorrCoefScript')
cmat = octave.pull('R')
enter code here

旁注 - 我只在特定的 .ipynb 脚本中遇到此问题。幸运的是,其他使用 oct2py 的脚本似乎没有受到影响。

【问题讨论】:

  • 您可能传递的是列表而不是 Numpy 数组。
  • (x) 是通过使用 .values 方法将 df 向下转换为 numpy 数组来生成的 - 我如何检查这是否会导致 Octave 中的数组,而 oct2py 在幕后?
  • 注意 - 当我从 Python 将 (x) 写入 csv 并在 Ocatve Gui 中加载 csv 时,它是一个与 Python 对象 (x) 具有相同维度的矩阵
  • 在 octave 脚本中,键入 class(x)(或那里调用的任何变量)。这应该将doublecell 或类似的东西打印到终端。我猜这是一个单元格数组,因为在其上调用 isnan 函数会导致您的错误。元胞数组由 Python 集合、列表和元组生成:blink1073.github.io/oct2py/source/conversions.html
  • 顺便说一句:不仅isnan 会产生这个错误,大多数数值函数都会产生这个错误。看起来您的函数都首先遇到isnan,但这是巧合。

标签: python jupyter-notebook octave oct2py


【解决方案1】:

已解决,但它产生的问题多于答案。我使用数据帧列表按类型循环,这样对于每次迭代ix 是通过x = dflst[i] 生成的。由于我无法理解的原因,随着时间的流逝,它失败了。但是,通过将我的循环写入自定义函数并显式调用该函数中的每个数据帧,如下所示:oct_func(type1df) 我看到了预期的行为和预期的结果。但是,我仍然无法使用循环将数据帧传递给oct_func()。因此,这是一个符合我的目的的创可贴解决方案,但令人沮丧的是无法扩展。

编辑: 如果遍历数据帧的字典而不是列表,则循环可以正常工作。

【讨论】:

    猜你喜欢
    • 2018-12-23
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    相关资源
    最近更新 更多