将X,Y向量给出的特定索引分配给某些数字MATLAB

San*_*lai 1 indexing matlab matrix vectorization

我真的错过了一些非常基本的东西,

问题: 我有一个2D矩阵说

A =   8     1     6
      3     5     7
      4     9     2
Run Code Online (Sandbox Code Playgroud)

现在我有一些X和Y索引作为向量

X = [1 2 3]
Y = [1 2 3]
Run Code Online (Sandbox Code Playgroud)

现在我想(1,1), (2,2), (3,3)A要分配一定的价值说1

预期产量:

out =   1     1     6
        3     1     7
        4     9     1
Run Code Online (Sandbox Code Playgroud)

ray*_*ica 5

一种方法是使用sub2ind创建线性列主要索引来将这些索引引用的位置设置为1.假设这X是您的行并且Y是您的列(由于矩阵和位置是对称的,因此很难分辨):

A(sub2ind(size(A), X, Y)) = 1;
Run Code Online (Sandbox Code Playgroud)

另一种方法是创建一个sparse矩阵,将其转换为logical矩阵,并使用它来索引A以设置相应的位置logical true为1:

B = logical(sparse(X, Y, 1, size(A,1), size(A,2)));
A(B) = 1;
Run Code Online (Sandbox Code Playgroud)