2012-12-28 3 views
1

전제 : 내 문제와 관련이있는 것으로 밝혀졌지만 사용 방법을 잘 모르므로 새로운 질문을하고 있습니다.matlab에서 다른 유형의 셀 배열 비교

[ 'string' 'string' 'number'

'string' 'string' 'number'

........................... ]

난에 행렬 A와, B = ['string' 'string' 'number']를 호출, 난 그냥 만든 셀 어레이를 비교해야합니다

내가 셀 매트릭스를 가지고, 다음과 같이 보일 것이다, 그것을 전화 B가 이미 거기에 있는지 확인하십시오. ismember를 사용하려고하면 인수가 문자열이 아니기 때문에 matlab에서 오류를 반환합니다.

어떻게해야합니까? 당신이 가지고있는 변수

답변

2

귀하의 질문은 약간 불분명하다, 그래서이 답변이 이러한 가정이있는 경우에만 유효합니다 코드 조각 제안으로

  • 당신은 정말 2 차원 셀 어레이가 아닌 문자 배열을 의미한다.
  • 셀 배열 A와 B는 두 번째 차원의 요소 수가 같습니다.

    sum(cellfun(@isequal,X,repmat(B,size(X,1),1)),2)==size(X,2) 
    

    간략한 설명 :

    다음 줄은 하나의 X의 행과 B 요소의 일치를 나타내는 1과 0의 열 벡터를 반환합니다

  • repmat는 B를 X의 크기로 복제합니다.
  • cellfun은 두 행렬의 모든 단일 요소를 비교합니다.
  • sum은 각 행에서 일치하는 문자열의 수를 계산합니다.
  • == 지정된 행의 모든 ​​요소가 일치하는지 확인합니다.

는이 일의 문제는 실제로 실제 번호로 부동 소수점 숫자를 필요로한다는 것입니다

+0

그것은 실제로 많은 도움이됩니다! 감사! – Andy

1

정확하게 확실하지 도움을

감사합니다,하지만이 작동 할 수 있습니다

['string' '_' 'string' '_' num2str(number)] 

합니다 예를 들어, 문자열로 모두를 켜고 다음 ismember 사용

ismember의 두 입력에서이 작업을 수행해야합니다.


당신의 변수의 크기에 따라, 단지 B 후 나중에 unique를 실행하는 모든 (또는 고유 모든 것을)에 연결하는 것이 더 쉬울 수 있습니다.

+0

희망이 도움 및 전환은 많은 시간을 차지합니다. – Andy

+1

두 번째 방법을 포함하여 게시물이 업데이트되었으므로 성능은 물론 변수에 따라 다릅니다. –