八度isnan:使用oct2py的未定义错误

时间:2019-03-22 17:54:12

标签: python jupyter-notebook octave oct2py

使用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]矩阵与昨晚保存的输出相同。我测试了矩阵变量是否通过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的脚本受到影响。

1 个答案:

答案 0 :(得分:1)

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

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