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

时间:2014-11-22 13:00:40

标签: 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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

以防你想要一个循环版本:p

A = zeros(4,4);
B = [4, 2, 3, 1];

for i = 1:length(B)

    A(i, B(i) ) = A(i, B(i) ) + 1;

end

答案 2 :(得分:0)

A = zeros(4);
B = [4 2 3 1];
A(repmat([1:4]',1,4) == repmat(B,4,1)) = 1

A =

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