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

标签 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);

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

例如,对于 indices(1) 中指示的第 1 行的第一列,我需要存储一个 1,这由等于 1 的 weights(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

关于arrays - 从索引数组创建二进制矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51084249/

相关文章:

c++ - 什么时候拥有太多动态数组会很危险?

java - Android 从文本文件中获取图像路径

matlab - 检测二维阵列中的 block 状区域

c++ - 如何定义自定义比较函数以根据一维数组排序对矩阵进行排序

python - 从 Numpy 中的 2 个向量形成矩阵,重复 1 个向量

java - 如何将字符串值转换为数组?

algorithm - 遗传算法与matlab如何使用分类精度作为适应度函数

Matlab 在 RegressionTree mex 文件中崩溃

Matlab交换

matrix - 相机矩阵中的原理点(编程问题)