操作方法:选择单元格数组中的所有行,其中特定列具有特定值

时间:2012-01-16 23:49:48

标签: octave cell-array

我有一个单元格数组,A。我想选择第一列(例如)的值为1234的所有行(例如)。

当A不是单元格数组时,我可以通过以下方式完成此任务:

B = A(A(:,1) == 1234,:);

但是当A是一个单元格数组时,我收到以下错误消息:

error: binary operator `==' not implemented for `cell' by `scalar' operations

有没有人知道如何实现这一点,对于单元阵列

3 个答案:

答案 0 :(得分:0)

目前我还没有Octave可供试用,但我相信以下会这样做:

B = A(A{:,1} == 1234,:);

当处理cells()返回单元格时,{}返回单元格的内容。

答案 1 :(得分:0)

问题是表达式a(:,1) == 1234(以及a{:,1} == 1234)。

例如:

octave-3.4.0:48> a
a = 
{
  [1,1] =  10
  [2,1] =  13
  [3,1] =  15
  [4,1] =  13
  [1,2] = foo
  [2,2] =  19
  [3,2] = bar
  [4,2] =  999
}
octave-3.4.0:49> a(:,1) == 13
error: binary operator `==' not implemented for `cell' by `scalar' operations
octave-3.4.0:49> a{:,1} == 13
error: binary operator `==' not implemented for `cs-list' by `scalar' operations

我不知道这是否是最简单或最有效的方法,但这有效:

octave-3.4.0:49> cellfun(@(x) isequal(x, 13), a(:,1))
ans =

   0
   1
   0
   1

octave-3.4.0:50> a(cellfun(@(x) isequal(x, 13), a(:,1)), :)
ans = 
{
  [1,1] =  13
  [2,1] =  13
  [1,2] =  19
  [2,2] =  999
}

答案 2 :(得分:0)

我猜A的类是cell。 (您可以在“工作区”框中看到)。

因此,您可能需要通过Acell2mat(A)转换为矩阵。

然后,就像您所做的Matlab一样:B = A(A(:,1) == 1234,:);