我想访问矩阵的多个索引,如下所示。所以我想要的是指数(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中是否有更好或更恰当的方法
答案 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