python - Octave isnan:使用 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] 矩阵与昨晚保存的输出相同。我测试了矩阵 var 是否通过 oct2py 正确传递给 Octave,并且 Octave 正在接收相同的矩阵。但是,oct2py 不能再通过源代码中的 nan 检查来执行任何.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 的脚本受到影响。
解决方案
得到了修复,但它产生的问题多于答案。我正在使用数据框列表按类型循环,这样对于每次迭代i
,x
都是通过x = dflst[i]
. 由于我无法理解的原因,随着时间的流逝,它失败了。但是,通过将我的循环写入自定义函数并显式调用该函数中的每个数据帧:oct_func(type1df)
我看到了预期的行为和预期的结果。但是,我仍然无法使用循环将数据帧传递给oct_func()
. 因此,这是一个适合我的目的的创可贴解决方案,但令人沮丧的是无法扩展。
编辑:如果迭代数据帧的字典而不是列表,则循环工作正常。
推荐阅读
- woocommerce - 在 Woocommerce 的产品级别设置数量步骤
- excel - 为什么我的 excel vba if/or 语句不能正常工作?
- laravel - 嗨,第 65 行出现意外的“)”错误
- javascript - 如何使用 javaScript 代码随机更改 url 和图像?
- mongodb - pymongo/mongodb 中的时区问题
- r - 以股票代码作为输入的用户定义函数?
- google-sheets - 如何快速创建工作表的超链接
- tcl - 如何匹配字符串并在此之后打印下一个单词?
- html - CSS光标图像奇怪的问题
- joomla - 无法从浏览器访问具有静态 IP 地址的 htdocs