Matlab `rowfun` 具有多个输出的函数: Safe to assume row order?

标签 matlab matlab-table

我尝试向 rowfun 提供一个函数,该函数返回与输入高度相同的多行输出。它似乎按预期工作。

% Example table with 2-column-array as a single data field
x = table( [1;1;2;2] , [[2;2;1;1] [2;1;2;1]] , ...
           'VariableNames' , {'idx' 'Field2columns'} )

  x = idx    Field2columns
      ___    _____________
      1      2    2       
      1      2    1       
      2      1    2       
      2      1    1       

% Example anonymous function takes all rows with same idx value and
% reverse their row order
y = rowfun( @(z) z(end:-1:1,:) , x , 'Input','Field2columns' , ...
            'Grouping','idx' , 'OutputVar','OutVar' )

  y =        idx    GroupCount    OutVar
             ___    __________    ______
      1      1      2             2    1
      1_1    1      2             2    2
      2      2      2             1    1
      2_1    2      2             1    2

% Append the generated data to original table
[ x y(:,{'OutVar'}) ]

  ans =      idx    Field2columns    OutVar
             ___    _____________    ______
      1      1      2    2           2    1
      1_1    1      2    1           2    2
      2      2      1    2           1    1
      2_1    2      1    1           1    2

这使得代码非常高效。否则,我将不得不循环遍历 x.idx 的所有不同值,为每个值提取 x 的匹配行,生成行反转子集并编译结果。

我唯一关心的是,我假设匿名函数的输出的行顺序将保持不变,并且每一行将与表x中的相应行对齐。例如,如果 idx=7,则当应用于 x(x) 时,x 中 idx=7 的第 N 行将与匿名函数输出中的第 N 行一起附加在右侧.idx==7,:).

rowfun 文档不处理第一个参数表示返回多行输出的函数的情况。我只能依赖观察到的行为。利用这种行为来简化我的代码是否明智,或者依赖这种未记录的行为是否是一种不好的做法,例如,可能无法涵盖极端情况,并且 TMW 没有义务在未来维持当前的行为?

最佳答案

如果您想留在记录区域,您可以使用非常方便的splitapply为了那个原因。要处理输出中的多行,您可以将它们放入单元格中,然后将其转换为表格:

y = splitapply(@(z) {z(end:-1:1,:)},x.Field2columns,x.idx) % note the {...} in the function
[x table(cell2mat(y),'VariableNames',{'OutVar'})] % this is like: [x y(:,{'OutVar'})]

我想这会降低效率,但它可以使您的代码保持在函数记录的行为范围内,而不需要使用循环。

关于Matlab `rowfun` 具有多个输出的函数: Safe to assume row order?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54158066/

相关文章:

matlab从关联矩阵绘制图形

matlab - 如何将绘图保存到 PDF 文件中而没有大的边距

r - 如何在 R 中导入 matlab 表

matlab - 没有维度名称的可写表

matlab - 如何在Matlab中的文件夹中查找.xlsx文件?

Matlab >>连接矩阵的维数不一致

matlab - 值类在表中的表示

excel - 从 Excel 选项卡在 Matlab 中自动创建和命名表

matlab - 如何仅重命名 MATLAB 表中的少数变量?

matlab - 如何在matlab中编写指标函数