matlab - 在matlab中,不使用循环为每一行增加不同的列元素

标签 matlab

假设您有一个由零组成的 4x4 矩阵 A:

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

还有一个 4x1 向量 B,表示矩阵 A 的列索引(因此值为 [1:4])

4
2
3
1

现在我想在向量 B 的每一行的索引上增加矩阵 A 中的列位置。 我自己尝试了几种构造,但无法完全做到这一点。

例如我尝试过:

A(:, B) = A(:, B)+1

这只会增加 A 中的每个元素。

这就是我希望操作执行的方式:

>> A(somethting(B)) = A(somethting(B)) + 1
0   0   0   1
0   1   0   0
0   0   1   0
1   0   0   0

最佳答案

您可以通过使用要寻址的每个元素的线性索引来实现此目的。使用 sub2ind 计算:

>> A = zeros(4)

A =

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

>> B = [4 2 3 1]

B =

     4     2     3     1

>> i=sub2ind(size(A),B,1:4)

i =

     4     6    11    13

>> A(i) = A(i)+1

A =

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

关于matlab - 在matlab中,不使用循环为每一行增加不同的列元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27077660/

相关文章:

matlab - 创建索引为 1 的向量的最惯用方法是什么?

c++ - 如何使用 MATLAB memmapfile 可视化数据?

matlab - GPU 性能要求,最好的解决方案是什么?

MATLAB - 如何解决 "Subscripted assignment between dissimilar structures"错误

matlab - 一次将一个数组中的元素添加到另一个数组

python - 为什么用 scipy 保存 mat 文件比用 Matlab 保存的文件大?

matlab - 这个 STFT 图的解释是什么?

algorithm - 生成算法舍入错误报告的 MATLAB 脚本

c++ - 即使OpenCV如此完善,为什么Matlab在计算机视觉社区中如此受欢迎?

matlab - rng ('default' ) 用于 MATLAB 与 Octave 中的 rand() 函数