首页 > 解决方案 > 根据行中的某些值拆分矩阵

问题描述

我有一个A这样的矩阵:

A = [911 911; 
       0   2; 
       8   5; 
       7   3; 
     911 911; 
       5   3; 
       1   6; 
       6   7; 
     911 911; 
       3   5; 
       8   4];

我想根据这样的行值将矩阵拆分A为三个矩阵(A1, A2, ) :A3911

A1 = [0 2; 8 5; 7 3]; 
A2 = [5 3; 1 6; 6 7];
A3 = [3 5; 8 4];

我需要在一个for循环中做这件事,这将一个接一个地给出吐出的矩阵。

这是我的小代码,它将找出行位置以找出911值:

key = 911;
headeridx = and(any(s1Table == key, 2), any(s1Table == key, 2));
row_position= find(headeridx);

然后我就纳闷了怎么做一个for循环(我需要这个循环)来生成这三个矩阵。

标签: loopsfor-loopmatrixoctave

解决方案


这是一种方法。

    clear
    A = [911 911;
           0   2; 
           8   5; 
           7   3; 
         911 911; 
           5   3; 
           1   6; 
           6   7; 
         911 911; 
           3   5; 
           8   4];

     ar=0;
     n=1;
     for k=1:rows(A)
       if A(k,1)==911
         ar=ar+1;
         n=1;
       else
         q{ar,n}=A(k,1:2);
         n=n+1;
       endif
     endfor

     A1=cell2mat(q(1,:)')
     A2=cell2mat(q(2,:)')
     A3=cell2mat(q(3,:)')

推荐阅读