MATLAB에서 셀형 배열의 문자열을 검색하는 방법은 무엇입니까?


답변:


128

다음 코드가 트릭을 할 수 있다고 생각합니다.

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ind=find(ismember(strs,'KU'))

이것은 반환

ans = 
     2

11
이 일반 솔루션은 여러 데이터 유형에 대해 작동하기 때문에 좋지만 정확히 일치하는 경우에만 작동합니다. 대소 문자를 구분하지 않는 일치가 필요한 경우 stackoverflow.com/a/9433112/44737을 참조하십시오 . 구조의 정규식 또는 필드와 같이 더 복잡한 것을 일치시켜야하는 경우 stackoverflow.com/a/8061808/44737
rob

ismember는 좀 더 투박하고 최신 버전으로 업데이트 할 수 있습니다. 나는 등 strcmpi, 같은 더 안전한 STR에 기반 기능을 느낀다
매디

1
도, 옥타브에서 작동
니노 반 Hooff

90
>> strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
>> tic; ind=find(ismember(strs,'KU')); toc

경과 시간은 0.001976 초입니다.

>> tic; find(strcmp('KU', strs)); toc

경과 시간은 0.000014 초입니다.

SO, 분명히 strcmp('KU', strs)보다 훨씬 적은 시간이 걸립니다ismember(strs,'KU')


5
큰! 귀하의 솔루션이 최고의 솔루션이어야합니다!
Antonvh

1
예, 동의합니다. 이것이 최상의 솔루션이지만 andreys와 vidars 솔루션 간의 비교 일뿐입니다. 그래서 실제로 andrey는 그것을 얻을 것입니다.
레오

1
실제로이 방법은 크기가 다른 두 배열을 비교하는 경우 작동하지 않는다는 점을 지적해야합니다 (즉, 왼쪽에 'KU'대신 문자열 배열이있는 경우). Vidar의 솔루션은이 경우 (매우 훌륭하게) 작동하므로 더 일반적입니다.
Nate

@pankaj : 이것은 String-> Indices의 Map을 만든 다음 맵 조회를 수행하여 인덱스를 얻는 것과 어떻게 비교됩니까? 현명하게 물어보십시오.
faizan

39

2011a 이후 권장되는 방법은 다음과 같습니다.

booleanIndex = strcmp('KU', strs)

종종 필요하지 않은 정수 인덱스를 얻으려면 다음을 사용할 수 있습니다.

integerIndex = find(booleanIndex);

strfind 더 이상 사용되지 않으므로 사용하지 마십시오.


23

모두가 코드에서 가장 중요한 결함을 놓친 것을 확인했습니다.

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}

해야한다:

strs = {'HA' 'KU' 'NA' 'MA' 'TATA'} 

또는

strs = {'HAKUNA' 'MATATA'}

이제 사용을 고수한다면

ind=find(ismember(strs,'KU'))

당신은 걱정하지 않을 것입니다 :).


나는 :) 원래의 질문하지만 톱 너무 많은 답변 편집에 관하여이었다
raggot

13

이 경우에는 다른 답변이 더 간단 할 수 있지만 완전성을 위해 익명 함수와 함께 cellfun 사용을 추가 할 것이라고 생각했습니다.

indices = find(cellfun(@(x) strcmp(x,'KU'), strs))

대소 문자를 구분하지 않거나 구조의 셀형 배열이있는 경우 쉽게 사용할 수 있다는 장점이 있습니다.

indices = find(cellfun(@(x) strcmpi(x.stringfield,'KU'), strs))

6

가장 짧은 코드 :

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
[~,ind]=ismember('KU', strs)

그러나 strs. 요소가 없으면 ind=0.


5

strcmp 및 strcmpi 함수는이를 수행하는 가장 직접적인 방법입니다. 그들은 배열을 통해 검색합니다.

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ix = find(strcmp(strs, 'KU'))

-2

시도해 보았 니

indices = Find(strs, 'KU')

링크 참조

또는

indices = strfind(strs, 'KU');

내가 착각하지 않으면 작동해야합니다.


나는 찾기를 시도했지만 배열이 셀형 배열이기 때문에 MATLAB이 나에게 몇 가지 오류를 반환합니다 ...하지만 strfind 함수가 작동하는 것 같습니다. 감사합니다!
Benjamin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.