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

Ant*_*ny 2 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);
Run Code Online (Sandbox Code Playgroud)

名为indices的数组存储索引,我需要在每列中存储1.

例如,对于在索引(1)中指示的第1行的第一列,我需要存储1,并且这由权重(1)表示,其等于1.

  M(indices(1), 1) = 1;
Run Code Online (Sandbox Code Playgroud)

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

  M(indices(2:4),2) = 1;
Run Code Online (Sandbox Code Playgroud)

类似地,对于第3列,在列2和4(指数(5:6))我需要存储1指数对第3列的范围由权重再次(3)表示.

  M(indices(5:6),3) = 1; 
Run Code Online (Sandbox Code Playgroud)

预期的二进制矩阵

预期和结果二进制矩阵是:

 1 1 0
 0 1 1
 0 1 0
 0 0 1
Run Code Online (Sandbox Code Playgroud)

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

And*_*uri 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
Run Code Online (Sandbox Code Playgroud)