从矩阵中提取多个索引

时间:2015-02-20 05:35:15

标签: matlab matrix

我想访问矩阵的多个索引,如下所示。所以我想要的是指数(1,3),(2,6),(3,7)被设置为1。但是,正如您所看到的那样,整个列都设置为1。我可以看到它在做什么,但有没有办法做我想要的(以优雅的方式 - 没有循环)。

a=zeros(3,10)
a(1:3,[3 6 7])=1

a =

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

我意识到你可以按照

的方式做点什么
x_idx=1:3, y_idx=[3 6 7];
idx=x_idx*size(a,2)+y_idx;
a(idx)=1;

但只是想知道在Matlab中是否有更好或更恰当的方法

1 个答案:

答案 0 :(得分:3)

您可以使用sub2ind,它基本上是您在帖子中提到的内容,但MATLAB有这个内置:

a = zeros(3,10);
a(sub2ind(size(a), 1:3, [3 6 7])) = 1

a =

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

另一种方法是创建logical sparse矩阵,然后使用它来索引a

a = zeros(3,10);
ind = logical(sparse(1:3, [3 6 7], true, size(a,1), size(a,2)));
a(ind) = 1

a =

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