2012-01-16 7 views
3

셀 배열이 있습니다. 예를 들어 첫 번째 열의 값이 1234 인 모든 행을 선택하고 싶습니다. 예).HowTo : 특정 열에 특정 값이있는 셀 배열의 모든 행을 선택하십시오.

A는 세포 배열이 아닌 때, 나는하여이 작업을 수행 할 수 있습니다 : A는, 내가이 오류 메시지가 셀 어레이를 얻을 때

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

그러나 :

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

사람이 알고 있나요 방법 이를 위해 셀 배열?

+0

'=='도 구현되지 않습니다 셀 단위로! –

답변

0

나는 그것을 밖으로 시도하는 순간에 가능한 옥타브가없는,하지만 난 다음 그것을 할 것이라고 믿는다

B = A (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 
} 
관련 문제