2012-01-16 21 views
3

セル配列があります。たとえば、最初の列(たとえば)の値が1234のすべての行を選択します。例)。HowTo:特定の列に特定の値があるセル配列のすべての行を選択します。

Aがセル配列でない場合は、私がすることによってこれを達成することができます

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

しかし、Aは、セル配列であるとき、私はこのエラーメッセージが表示されます:

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

誰がどのように知っていますこれを達成するために、セルアレイ

+0

'=='でも実装されていません。セルごとに! –

答えて

0

私はそれを試してみるために、現時点で入手可能なオクターブを持っていないが、私は次のようにそれを行うだろうと信じている:

B = A({:、1} == 1234、:)。

セル()を処理するとセルが返されますが、{}はセルの内容を返します。

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 
} 
関連する問題