gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:06:26 25 4
gpt4 key购买 nike

问题的定义

我有两个数组,分别称为权重和索引:

 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com