假设你有一个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
答案 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