Matlab 如何在特定条件下从一个矩阵创建两个或多个矩阵?

Matlab 如何在特定条件下从一个矩阵创建两个或多个矩阵?,matlab,loops,matrix,Matlab,Loops,Matrix,你好,我是matlab新手,我不知道如何解决问题 我有: 1 0 2 334.456 3 654.7654 4 65.76543 1 0 2 543.43567 3 98.432 4 54.9876 5 12.456 以及Matrix2: 1 2 2 3 3 4 1 2 2 3 3 4 4 5 Matrix2表示Matrix1中按出现顺序找到的链接 我想分离块(矩阵)中的链接,其中每个块从停止1开始。因此,通过分析矩阵2,我应该

你好,我是matlab新手,我不知道如何解决问题

我有:

1   0
2   334.456
3   654.7654
4   65.76543
1   0
2   543.43567
3   98.432
4   54.9876
5   12.456
以及Matrix2:

1   2
2   3
3   4
1   2
2   3
3   4
4   5
Matrix2表示Matrix1中按出现顺序找到的链接

我想分离块(矩阵)中的链接,其中每个块从停止1开始。因此,通过分析矩阵2,我应该产生两个新的矩阵,一个是链接(1,2)(2,3)(3,4),另一个是链接(1,2)(2,3)(3,4)(4,5)。 因此,每次我找到stop 1时,它就会开始构建一个新的矩阵。
我想把
A
B
列为:

A= [1,2, 334.456; 2,3,654.7654;3,4,65.76543]
B=[1,2,543.43567;2,3,98.432;3,4,54.9876;4,5,12.456]
我想这正是你想要的<代码>矩阵是一个单元格数组,包含所需的不同矩阵的数量(基于Matrix2第1列中1的数量)

结果如下:

>> matrices{1,1}

ans =

    1.0000    2.0000  334.4560
    2.0000    3.0000  654.7654
    3.0000    4.0000   65.7654

>> matrices{2,1}

ans =

    1.0000    2.0000  543.4357
    2.0000    3.0000   98.4320
    3.0000    4.0000   54.9876
    4.0000    5.0000   12.4560

也许它会有用

  Matrix1 = [
    1   0
    2   334.456
    3   654.7654
    4   65.76543
    1   0
    2   543.43567
    3   98.432
    4   54.9876
    5   12.456
  ];

  result = {};
  index = 1;
  temp = [];
  prev = [];

  for i=1:size(Matrix1)(1)
    if (Matrix1(i, 1) == 1)
      if (~isempty(temp))
        result{index++} = temp;
        temp = [];
      end
      prev = Matrix1(i, 1:2);
    else
      curr = Matrix1(i, 1:2);
      val = [prev(1), curr(1), curr(2)];
      prev = curr;

      temp = [temp; val;];
    end
  end

  if (~isempty(temp))
    result{index} = temp;  
  end

  result

对不起,这根本不是问题所在。仔细看这个例子,它是完美的。多谢各位!我认为
Matrix2
是一个输出而不是一个输入,但是仅仅使用
Matrix1
并不难。在您的示例中,您实际上并没有构建两个不同的矩阵。你的目标是按照你展示的形式构建一个矩阵吗?创建多个命名矩阵通常是一件坏事,除非你喜欢矩阵的单元格数组,我强烈建议你这样做。请提供一个清晰的例子。这两个矩阵看起来像什么?它们是否应该包含条目
Matrix1(1,2)
Matrix1(2,3)
等等?
  Matrix1 = [
    1   0
    2   334.456
    3   654.7654
    4   65.76543
    1   0
    2   543.43567
    3   98.432
    4   54.9876
    5   12.456
  ];

  result = {};
  index = 1;
  temp = [];
  prev = [];

  for i=1:size(Matrix1)(1)
    if (Matrix1(i, 1) == 1)
      if (~isempty(temp))
        result{index++} = temp;
        temp = [];
      end
      prev = Matrix1(i, 1:2);
    else
      curr = Matrix1(i, 1:2);
      val = [prev(1), curr(1), curr(2)];
      prev = curr;

      temp = [temp; val;];
    end
  end

  if (~isempty(temp))
    result{index} = temp;  
  end

  result