我有两个分别称为权重和索引的数组:
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,从而以一般方式做到这一点?
答案 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