2016-08-23 120 views
1

我想比較兩個不同大小的向量。例如,當我運行下面的代碼:比較不同長度的向量

A = [1 4 3 7 9]; 
B = [1 2 3 4 5 6 7 8 9]; 

myPadded = [A zeros(1,4)]; 

C = ismember(myPadded,B) 

我得到以下輸出:

C = 1 1 1 1 1 0 0 0 0 

不過,我想輸出將反映比較值的位置,因此,我想被顯示爲輸出如下:

C = 1 0 1 1 0 0 1 0 1 

請,我需要一些幫助:)

回答

6

還有2分。首先,您按錯誤順序編寫ismember的輸入。此外,您不需要增加矩陣。只需嘗試ismember(B, A),你就會得到你所期望的。

5

ismember(B, myPadded)ismember(myPadded, B)返回向量的myPadded大小相同,表明如果myPadded的第i個元素存在於B.

爲了得到你想要的東西,只是顛倒參數順序的功能。

+0

有人在這裏犯了一個可怕的錯誤。這完全是反向直觀的。冰淇淋給所有誰從來沒有得到這種比較逆轉:) – patrik

+0

我特別不覺得。相反,而不是任意。然而,這與在控制檯中寫下「help ismember」一樣簡單:-) – dunadar

+1

我剛剛評論說你只需要'ismember(B,A)',但@erfan發佈了他們的答案。 – user1543042

0

這樣做的一個快速方法是使用邏輯索引。這隻有在A中包含B的最後一位數字時纔有效。

A = [1 4 3 7 9]; 
c(A) = 1; % or true. 

這裏有一個前提是,你要分類指數矢量1:N,使B總是B = 1:N。如果最後一位數字不是一個,這很容易解決。請記住在完成之後將所有狀態恢復到之前的狀態。這將是2行額外,但。

此解決方案是指處理一個非常常見的問題的特殊情況。