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

Creating a Binary Matrix from an Array of 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);

名为 indices 的数组正在存储我需要在每一列中存储 1 的索引。

例如,对于索引 (1) 中指示的第 1 行的第一列,我需要存储一个 1,这由等于 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 列的索引范围再次由权重(3)指示。

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

预期的二进制矩阵

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

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

解决方案

有什么方法可以通过使用权重和索引数组以通用方式执行此操作,而不是以硬编码方式创建二进制矩阵 M?

你只是用一种奇怪的方式来描述你的索引,所以你只需要将它们转换成标准的东西。

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