连接不同大小的二进制矩阵

时间:2011-06-01 05:43:38

标签: matlab

数据为大小为 n x 2 的非负矩阵。

现在数据矩阵分为 Data_1 ,其大小为 n1 x 2 Data_2 的大小为 n2 x 2 数据中的一行可能属于

  1. Data_1 Data_2
  2. Data_1 Data_2
  3. Data_1 Data_2
  4. 对应 Data_1 Data_2 矩阵,我们有二进制矩阵 DataIndicator1 ,大​​小 n1 x k1 DataIndicator2 分别为 n2 x k2

    现在我想为数据 n x(k1 + k2)创建一个新的二进制矩阵,以便

    1. 数据中的行属于 Data_1 Data_2 时,生成的二进制矩阵中的行来自 DataIndicator1 < / strong>或 DataIndicator2 ,其他条目分别为0。
    2. 数据中的一行属于 Data_1 Data_2 时,结果指标矩阵中的行来自 DataIndicator1 < / strong>和 DataIndicator2 连接在一起。
    3. 数据中的行不属于 Data_1 Data_2 时,结果指标矩阵中的行应为0
    4. 任何人都可以在matlab中为我提供有效的方法吗?

1 个答案:

答案 0 :(得分: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),:);