2011-06-01 49 views
0

數據是大小爲n x 2的非負矩陣。連接不同大小的二進制矩陣

現在數據矩陣被劃分爲_1大小的N1×2數據_2大小的N2×2。在數據甲行可以屬於

  1. 要麼_1數據_2
  2. _1數據_2
  3. 既不_1也不數據_2

對應_1_2矩陣,我們有分別二元矩陣DataIndicator1大小N1 X K1的DataIndicator2大小N2 X K2的。

現在我想爲創建大小NX(K1 + K2)使得

  1. 當從數據一個行所屬的一個新的二進制矩陣數據要麼_1Data_2,得到的二進制矩陣中的行來自DataIndicator1DataIndicator2,其他條目分別爲0.
  2. 當行從數據同時屬於_1數據_2,在所得指示器矩陣的行從DataIndicator1DataIndicator2連接在一起。
  3. 當從數據犯規的行同時屬於_1數據_2,在所得指示器矩陣中的行應爲0

任何一個可以提供我在做它的有效方法matlab的?

+0

你怎麼知道哪個Data'的'行屬於'Data_1'和'Data_2'? – 2011-06-01 10:13:22

+0

如果我理解正確,你的輸入是'Data','Data_1','Data_2','DataIndicator1'和'DataIndicator2',並且你想要編碼的東西找到前三個匹配的信息兩個變成一個新的變量'DataIndicator' ...是嗎? – 2011-06-01 11:29:30

+0

我認爲你的問題可以從一個小例子中獲益... – 2011-06-01 11:29:53

回答

3

如果有任何的陣列沒有重複行,有使用ISMEMBER一個直截了當的回答:

[tf1,idx1] = ismember(data,data_1,'rows'); %# find where the rows of data_1 are in data 
[tf2,idx2] = ismember(data,data_2,'rows'); %# find where the rows of data_2 are in data 

n = size(data,1); 
k1 = size(dataIndicator1,2); 
k2 = size(dataIndicator2,2); 

binaryMatrix = false(n,k1+k2); 
binaryMatrix(tf1,1:k1) = dataIndicator1(idx1(tf1),:); 
binaryMatrix(tf2,k1+1:k2) = dataIndicator1(idx2(tf2),:);