【问题标题】:Matlab matrix operation without loop无循环的Matlab矩阵运算
【发布时间】:2017-03-15 16:34:09
【问题描述】:

我有一个矩阵X = [x1,y1;...;xn,yn]; 和一个向量index(1,n)。 index的值在1到5之间。

我想根据索引将X分成5个矩阵X1,...,X5。

一个例子:

X = [1,1;2,2;3,3;4,4;5,5;6,6;7,7;8,8]index = [1,2,3,5,4,4,5,1]

所以,我想要X1 = [1,1;8,8], X2 = [2,2] 等等...

条件是不要在 X 上使用带有 if 条件的循环,以便在有数十亿个点的情况下最大限度地减少执行时间。

最好的问候

【问题讨论】:

    标签: matlab loops matrix


    【解决方案1】:

    您可以使用查找函数轻松访问所需的子矩阵:

    X = [1,1;2,2;3,3;4,4;5,5;6,6;7,7;8,8];
    index = [1,2,3,5,4,4,5,1];
    
    Xi=@(x)X(index==x,:);
    subX = arrayfun(Xi,1:5,'uniformoutput',0);
    

    请注意,arrayfun 可以将查找函数应用于每个索引,以便将所有结果矩阵存储在一个元胞数组中。然后可以使用以下方式访问它们:

    subX{1}
    

    哪些输出:

     1     1
     8     8
    

    【讨论】:

      【解决方案2】:

      您可以做的是使用逻辑索引。

      X1=X(index==1,:); % This will pick all rows of X for which index has the value 1
      X2=X(index==2,:); % and the same for X2 to X5
      

      仍然可以循环使用它。尤其是如果您的索引数组的值不止 5 个。

      【讨论】:

        猜你喜欢
        • 2013-01-11
        • 2017-08-06
        • 2014-11-22
        • 2013-12-21
        • 1970-01-01
        • 2013-08-13
        • 1970-01-01
        • 1970-01-01
        • 2015-02-20
        相关资源
        最近更新 更多