您幾乎可以使用的代碼。我建議你做的是將空間中的A
和B
中的字符串分開。因此,A
和B
然後將是元素的單元陣列,其中A
或B
中的每個元素是單個詞。這些空格將作爲分隔詞的分隔符。
一旦你這樣做,使用intersect
來查看A
中的單詞和B
中的單詞之間是否有任何常見單詞。 intersect
通過將兩個數組(它們可以是數值數組,單元陣列等)C
和D
作爲集合起作用,並且它返回這兩個數組之間的集交集。
在我們的情況下,C
和D
將是從A
和B
由空格分隔單詞的單元陣列。 intersect(C,D)
將返回字符串的單元數組,其中輸出中的每個元素都是中的字符串,這兩個字符串均爲C
和D
。因此,如果這個單元陣列不是空的,我們在C
和D
之間找到至少一個常用單詞。如果是這樣的話,那麼在你的矩陣的位置設置你的二進制標誌爲1。換句話說:
BinaryMatrix = false(20033,19);
for i=1:1:20033
for j=1:1:19
Asplit = strsplit(A{i});
Bsplit = strsplit(B{j});
if (~isempty(intersect(Asplit, Bsplit)))
BinaryMatrix(i,j)= true;
end
end
end
你會發現,我從zeros(20033,19)
改變了你的矩陣,以false(20033,19)
。之所以會這樣做,是因爲在做zeros
時,您在矩陣中爲每個數字分配了8個字節,因爲這會以雙精度創建您的矩陣。通過做false
,這將是一個logical
矩陣,而您正在爲每個數字分配1個字節。看到您想要BinaryMatrix
爲true
或false
,請勿使用double
- 請使用logical
。我不知道這兩個單元陣列有多大,所以這樣做會降低你的內存消耗8
小注
strsplit
只能從R2013a及以後。如果您有一個R2012b及更低版本的MATLAB,請將strsplit
替換爲regexp
。因此,你會替換for
環與兩條線:
Asplit = regexp(A{i}, ' ', 'split');
Bsplit = regexp(B{j}, ' ', 'split');
取代''通過any' find'?另外,這些單元格包含什麼? –
每個單元格都包含一串單詞。這些字符串的長度是不同的。一個可能是20,另一個是300. – user36729
你嘗試過使用'intersect'嗎? – rayryeng