2014-04-08 71 views
1

我可以使用或不使用循環做下面的代碼嗎?在循環中使用strmatch

其實我有一個字符數組,其中包含比5000更多的唯一字以及包含大約3000字的其他數組。我想搜索我的數組中的每個單詞作爲名稱爲uniques的其他數組中的單詞,並且希望創建特徵向量,即如果存在則創建值1,如果不存在則創建0

我做了以下..

load 'uniques' %uniques={'alpha','ok',abc'}; 
fid=fopen(myfilename); 
words=textscan(fid,'%s'); 
fclose(fid); 
word=words{1,1}; %word={'good','bad',anywhere','countries','ok',done','abc'} 

for i=1:size(uniques,2) 
ind=strmatch(word(i), uniques, 'exact'); 
end 

現在,上面看到,因爲之前uniquesword一陽指的例子,我的系統必須返回0goodgood是不存在的uniques和同0值,但1因爲它確實存在於uniques。總而言之,我必須在年底,{0,0,0,0,1,0,1} ..

我運行後,它給了我ind=[]

請指導

+0

以目前的形式,您的問題很難理解,也不可能得到答案。但幸運的是,你可以改進它,因爲SO允許你編輯你的問題!請**提供每個數組的示例數據**(但使用5個元素而不是5000和3而不是3000)**,並且還包括一個手工操作的示例輸出**。當您添加示例輸入時,請使用matlab語法,以便我們可以複製並粘貼到matlab中。 – Dan

+1

您在循環的每個階段覆蓋'ind'。另外,爲什麼你將'uniques'的大小作爲循環的大小,然後索引到'word'中對我來說是一個謎。 – nkjt

+0

可以是'uniques'或'word'是否有重複的單詞或是否都是唯一的列表? – Dan

回答

1

您所描述的ismember功能的確切功能:

ismember(word, uniques); 

順便說一句,這是什麼@nkjt在說有關解決您的循環:

for i=1:size(word,2) 
    ind(i)=strmatch(word(i), uniques, 'exact'); 
end 

但是這個循環是不必要的,因爲Matlab有這個功能作爲內置功能