Объединить двоичную матрицу разного размера - PullRequest
0 голосов
/ 01 июня 2011

Пусть Данные - неотрицательная матрица размера n x 2 .

Теперь матрица Data делится на Data_1 размера n1 x 2 и Data_2 размера n2 x 2 . Строка в Данные может принадлежать

  1. Либо Данные_1 или Данные_2
  2. Данные_1 и Данные_2
  3. Ни Данные_1 , ни Данные_2

Соответствует Data_1 и Data_2 матрица у нас есть двоичная матрица DataIndicator1 размера n1 x k1 и DataIndicator2 размером n2 x k2 соответственно.

Теперь я хотел бы создать новую двоичную матрицу для Данных размера n x (k1 + k2) , таких что

  1. Если строка из Data принадлежит либо Data_1 , либо Data_2 , строка в результирующей двоичной матрице имеет значение DataIndicator1 или DataIndicator2 соответственно с другими записями как 0.
  2. Когда строка из данных принадлежит обоим Data_1 или Data_2 , строка в результирующей матрице индикаторов имеет значение DataIndicator1 и DataIndicator2 объединены вместе.
  3. Если строка из Data не принадлежит обоим Data_1 или Data_2 , строка в результирующей матрице индикатора должна быть 0

Может ли кто-нибудь дать мне эффективный способ сделать это в Matlab?

1 Ответ

3 голосов
/ 01 июня 2011

Если в ваших массивах нет повторяющихся строк, можно получить простой ответ, используя 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),:);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...