0

如何过滤以匹配或排除 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 的所有行,等等。我尝试阅读文档并搜索示例,但我只是没有看到它。

谢谢!

4

1 回答 1

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
于 2013-08-24T14:21:00.693 回答