从索引数组创建二进制矩阵
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
问题的定义
我有两个数组,分别称为权重和索引:
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