1

我有一个矩阵,例如

[1     1     1
 1     1     1
 1     1     1]

我希望它是

[2     1     1
 1     2     1
 1     1     2]

我怎么做?

4

3 回答 3

6

使用eye函数获取单位矩阵并添加到原始矩阵

result = A+eye(3,3) ; % A the original matrix 
于 2014-01-18T19:58:48.503 回答
3

另一种可能性,需要较少的操作(对于大型矩阵可能更好):

A(1:size(A,1)+1:end) = A(1:size(A,1)+1:end) + 1;

这使用线性索引的概念来处理对角线元素。

于 2014-01-19T03:11:44.540 回答
0

通过逻辑索引的另一种方式:

idx = eye(size(A))>0;
A(idx)= A(idx)+1;

这也可以很容易地用于其他事情:

A(~idx)=2*A(~idx); %Multiply all non diagonal elements by two
A(eye(size(A))>0)=1:min(size(A)); %Set the diagonal to 1:n
于 2014-01-19T11:05:18.543 回答