从索引数组创建二进制矩阵

时间:2018-06-28 13:31:50

标签: arrays matlab matrix vectorization indices

问题的定义

我有两个分别称为权重和索引的数组:

 weights = [1, 3, 2]; 
 indices = [1, 1, 2, 3, 2, 4]; 

 m = 4; % Number of Rows in Matrix
 n = 3; % Number of Columns in Matrix
 M = zeros(m, n);

称为索引的数组用于存储索引,我需要在每一列中存储1。

例如,对于索引(1)中指示的第1行的第一列,我需要存储1,并由weights(1)等于1表示。

  M(indices(1), 1) = 1;

对于第2列,在第1至3行(索引(2:4)),我需要存储1。第2列的索引范围再次由weights(2)表示。

  M(indices(2:4),2) = 1;

同样,对于第3列,在第2行和第4行(索引(5:6)),我需要存储1。第3列的索引范围再次由weights(3)表示。

  M(indices(5:6),3) = 1; 

期望的二进制矩阵

预期的结果二进制矩阵为:

 1 1 0
 0 1 1
 0 1 0
 0 0 1

解决方案

有什么办法可以通过使用权重和索引数组,而不是以硬编码的方式来创建二进制矩阵M,从而以一般方式做到这一点?

1 个答案:

答案 0 :(得分:6)

您只是有一种怪异的方式来描述索引,因此您只需要将它们转换为标准值即可。

columsn_idx=repelem(1:n,weights);       % repeat column number as much as needed
row_idx=indices ;                       % just for clarity
M(sub2ind([m,n],row_idx,columsn_idx))=1;% Use linear indices