【问题标题】:How to replace the MATLAB functions table and table2array in Octave?如何在 Octave 中替换 MATLAB 函数 table 和 table2array?
【发布时间】:2019-10-16 12:36:17
【问题描述】:

我想在 Octave 中运行我的 MATLAB 脚本,但在使用 Octave 中尚不存在的 table 函数时遇到问题。

我要使用的表格摘录如下所示:

Rotation angle  Measured distance
-0,342  0,000
-1,440  0,000
-10,422 0,000
-11,574 0,000
-21,060 0,000
-21,528 0,000
-30,402 0,000

为了创建我的输出变量,我在 MATLAB 中使用以下代码。

data = table;
data.Rotationangle = cell2mat(raw(:, 1));
data.Measureddistance = cell2mat(raw(:, 2));

在 Octave 中我得到以下错误。

warning: the 'table' function is not yet implemented in Octave

Please read <https://www.octave.org/missing.html> to learn how you can
contribute missing functionality.
error: 'table' undefined near line 102 column 8
error: called from
    Cloud_reconstruction at line 102 column 6

我现在的问题是,是否有机会替换 Octave 中的表格功能?我试图用 Octave data frame 包找到解决方案,但实际上并没有。

在同一个脚本中,我还使用了 table2array 函数,该函数还没有在 Octave 中实现,以后也会出现错误。

data = table2array(data); 

如果有人可以帮助我,我会很高兴。

【问题讨论】:

    标签: matlab octave


    【解决方案1】:

    您可以将类似的语法用于带有结构的“列”索引

    data = struct;
    data.var1 = [1;2;3;4];
    data.var2 = [5;6;7;8];
    

    但是,您会丢失许多 MATLAB 中可用的特定于表的操作。

    如果你有上述数据,你可以使用struct2array而不是table2array来转换成矩阵

    data = struct2array( data );
    

    如果你还是使用table2array,你最终会得到一个矩阵,那么为什么不首先坚持矩阵呢?如果您的所有数据都是数字,它们通常会更快地进行操作。

    data = [cell2mat(raw(:,1)), cell2mat(raw(:,2))];
    

    编辑:看来struct2array 也可能是来自 Octave 的 missing。但是,在那个缺失的链接中,您可以找到几个等效功能的附件。

    【讨论】:

    • 非常感谢,在您的帮助下,我能够替换这些功能。不幸的是,现在发生了另一个错误,涉及我自己无法解决的“尺寸不匹配”。我想我必须为此发布一个新问题?我只是问,因为我是 Stack Overflow 的新手,不知道这里是如何处理的。
    • 很高兴我能帮上忙,是的,这听起来像是一个新问题 :)
    【解决方案2】:

    我邀请您试用我的 Tablicious 包,它提供了 tabledatetime 和相关类的 Matlab 兼容 Octave 实现。

    https://github.com/apjanke/octave-tablicious

    【讨论】:

    • 仅链接的答案通常更适合作为问题下的 cmets。这可以通过展示如何在这个问题的上下文中实际使用包来改进。
    猜你喜欢
    • 2012-04-18
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多