【问题标题】:Extract multiple indices from matrix从矩阵中提取多个索引
【发布时间】:2015-02-20 05:35:14
【问题描述】:

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

【问题讨论】:

    标签: matlab matrix


    【解决方案1】:

    您可以使用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
    

    另一种方法是创建一个logicalsparse 矩阵,然后使用它来索引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
    

    【讨论】:

    • +1... 一个建议,而不是将稀疏转换为逻辑,您可以直接创建一个可用于索引的稀疏逻辑数组...ind = sparse(1:3, [3 6 7], true, size(a,1), size(a,2));
    • @RTL - 是的。我忘记了。谢谢!
    猜你喜欢
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多