3

セル配列 A があります。最初の列 (たとえば) の値が 1234 (たとえば) であるすべての行を選択したいと考えています。

A がセル配列でない場合、次の方法でこれを実現できます。

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

しかし、A がセル配列の場合、次のエラー メッセージが表示されます。

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

セル配列の場合、これを達成する方法を知っている人はいますか?

4

3 に答える 3

1

問題は式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
}
于 2012-09-19T20:10:17.900 に答える
0

現時点では、試してみるための Octave はありませんが、次の方法で実行できると思います。

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

セルを処理する場合、() はセルを返し、{} はセルの内容を返します。

于 2012-02-02T18:29:22.663 に答える