在matlab中,在不使用循环的情况下为每行增加不同的列元素

Spy*_*ral 2 matlab

假设你有一个4x4的零矩阵A:

0   0   0   0
0   0   0   0
0   0   0   0
0   0   0   0
Run Code Online (Sandbox Code Playgroud)

和一个4x1向量B,表示矩阵A的列索引(所以值[1:4])

4
2
3
1
Run Code Online (Sandbox Code Playgroud)

现在我想在向量B的每一行的索引上增加矩阵A中的列位置.我自己尝试了几个结构但是不能完全设法做到这一点.

例如我试过:

A(:, B) = A(:, B)+1
Run Code Online (Sandbox Code Playgroud)

这只是增加A中的每个元素.

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

>> A(somethting(B)) = A(somethting(B)) + 1
0   0   0   1
0   1   0   0
0   0   1   0
1   0   0   0
Run Code Online (Sandbox Code Playgroud)

Die*_*ter 5

您可以通过对要解决的每个元素使用线性索引来完成此操作.使用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
Run Code Online (Sandbox Code Playgroud)