2012-12-28 146 views
1

前提:我發現了一些似乎與我的問題有關的東西,但我不確定如何使用它,因此我提出了一個新問題。比較matlab中不同類型的單元陣列

我有一個細胞矩陣,稱之爲A,這將是這個樣子:

[ 'string' 'string' 'number'

'string' 'string' 'number'

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

,我需要比較我剛剛創建了一個單元陣列,稱之爲B = ['string' 'string' 'number'],與矩陣A到看看B是否已經存在。如果我嘗試使用ismember,matlab會返回錯誤,因爲參數不是字符串。

我該怎麼辦?

感謝您的幫助

回答

2

你的問題是有點不清楚,所以這個答案是唯一有效的,如果這些假設是:

  • 你真的是電池陣列,而不是字符數組中的第2個維度 你的代碼片段建議。
  • 您的單元格陣列A和B在第2個維度中具有相同數量的元素。

下面一行將返回一和零,其中一個指示匹配在X與行B元素的列向量:

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

簡要說明:

  • repmat將B複製到X的大小。
  • cellfun比較兩個矩陣中的每個單個元素。
  • sum計算每行中字符串匹配的數量。
  • ==檢查給定行中的所有元素是否匹配。

希望它可以幫助

+0

它確實幫助了很多!謝謝! – Andy

1

不清楚自己有哪些變量,但是這可能工作:

關閉所有成一個字符串,然後用ismember,例如:

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

製作一定要在ismember的兩個輸入上做到這一點。


根據您的變量的大小,它可能會更易於他們只是在一切(或者說是獨一無二的一切),以B,然後運行unique之後。

+0

有這樣做的問題是,我真正需要的浮點數是實數,和轉換佔用了大量的時間。 – Andy

+1

更新後的文章包括第二種方法,其性能取決於您的變量當然。 –