2011-06-01 57 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),:);