如何过滤以匹配或排除Octave中的某些字段?

时间:2013-08-23 20:38:33

标签: linux octave

如何过滤以匹配或排除Octave中的某些字段?

在CentOS 5.8上使用Octave 3.0.5,我需要从更大的矩阵中过滤行以进行各种分析。

例如,我有一个如下所示的数组:

A = { [ 0, 5, 32 ],
      [ 0, 3, 2  ],
      [ 1, 4, 13 ],
      [ 1, 2, 32 ],
      [ 2, 7, 99 ],
      [ 2, 0, 42 ] };

现在我需要能够提取第一个值等于1的所有行,或者第二个值大于3的行等等。我已经尝试阅读文档并搜索示例,但是我只是没有看到它。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用cellfun遍历单元格数组并获取索引(二进制):

octave> cellfun (@(x) x(1) == 1 || x(2) > 3, A)
ans =

   1
   0
   1
   1
   1
   0

使用您的示例:

octave> A(cellfun (@(x) x(1) == 1 || x(2) > 3, A))
ans = 
{
  [1,1] =

      0    5   32

  [2,1] =

      1    4   13

  [3,1] =

      1    2   32

  [4,1] =

      2    7   99

}

可能更快的替代方案是完全抛弃单元阵列并使用矩阵(只要单元阵列中的每个单元具有相同的大小,矩阵就更有意义,即使您需要创建多维矩阵)。这可能会更快更简单:

octave> B = cell2mat (A);
octave> B(B(:,1) == 1 | B(:,2) > 3, :)
ans =

    0    5   32
    1    4   13
    1    2   32
    2    7   99