arrays - 如何在不使用 for 循环的情况下引用列索引向量更改矩阵的元素?

标签 arrays matlab matrix octave

我有一个矩阵

a =

   0   0   0   0   0
   0   0   0   0   0
   0   0   0   0   0
   0   0   0   0   0
   0   0   0   0   0
   0   0   0   0   0

b向量

b =

   1   2   3   4   5   5

我想用b矩阵值的引用值替换a矩阵中每一行的值,最后生成如下矩阵而不使用for循环。

a_new =

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

如果 b 的第一个元素,b(1) = 1 所以更改 a 向量的第一行并将第一个元素设为 1 因为 b(1 ) = 1

如何在不使用 for 循环的情况下实现它?

最佳答案

当然。你只需要构建一个 linear index来自 b 并使用它来填充 a 中的值:

a = zeros(6,5); % original matrix
b = [1 2 3 4 5 5]; % row or column vector with column indices into a
ind = (1:size(a,1)) + (b(:).'-1)*size(a,1); % build linear index
a(ind) = 1; % fill value at those positions

关于arrays - 如何在不使用 for 循环的情况下引用列索引向量更改矩阵的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39613081/

相关文章:

java - Matlab 2017a 是否改变了导入外部 java 类的方式?

r - 是否有任何函数可以从多列的多行和中获取结果并将其保存在新矩阵上?

python - 将两个 numpy 数组转换为成对数组的数组

javascript - 理解数组的关键代码

c - 带有用户输入的二维数组

matlab - 从 Matlab 中的 Gumbel 分布中抽取随机数

regex - matlab:正则表达式和拆分,并选择一些单元格

c++ - C++ 中的矩阵库与 For 循环

c - 在C中,如何在目录中找到所有文件名并将它们存储在字符串数组中?

arrays - jq from_entries 的变体,它整理每个键出现的值