Matlab 根据条件将向量划分为多个较小的向量

Matlab 根据条件将向量划分为多个较小的向量,matlab,Matlab,我有两个向量(长度=172992),A有一些双数据,B只有0,1,2,3和4作为值。我需要在两个向量上移动并检查B的值。如果B不是零,则创建一个新向量,并将该索引中所有a的值放入其中,直到B返回值变为零,依此类推。。然后用所有新创建的向量创建一个矩阵。有什么帮助吗 %Example: A = [1 2 3 4 5 6 0 0 0 0 7 7 7 7 7 7 0 0 0 0 4 4 4 4 4 4 ]; B = [1 1 1 1 1 1 0 0 0 0 2 2 2 2 2 2 0 0 0

我有两个向量(长度=172992),
A
有一些双数据,
B
只有0,1,2,3和4作为值。我需要在两个向量上移动并检查
B
的值。如果
B
不是零,则创建一个新向量,并将该索引中所有
a
的值放入其中,直到
B
返回值变为零,依此类推。。然后用所有新创建的向量创建一个矩阵。有什么帮助吗

%Example:
A = [1 2 3 4 5 6 0 0 0 0  7 7 7 7 7 7 0 0 0 0  4 4 4 4 4 4  ];
B = [1 1 1 1 1 1 0 0 0 0  2 2 2 2 2 2 0 0 0 0  3 3 3 3 3 3  ];
%The output:
Mat = [ 1 2 3 4 5 6;  7 7 7 7 7 7 ;4 4 4 4 4 4 ];
非矩形 由于Matlab无法处理非矩形矩阵(如示例中所示),因此必须返回单元阵列来存储每个输出向量。 您可以使用和过滤
A
的元素:

然后,您可以像这样将各个向量放入它们自己的变量中

[m1,m2,m3] = sol{:};

矩形的 对于矩形数据(即,将
4
添加到
a
的第一个分组中),您可以更轻松地创建矩阵(仍然使用逻辑索引):


您的矩阵
Mat
是不可能的,因为行中的元素数不同。很抱歉,缺少4个矩阵。特洛伊,我们可以制作四个矩阵,每个矩阵包含一个数字(mat1、mat2、mat3和mat4)的值吗。。它是一个矩形矩阵。。为什么第一个是5X1而不是6X1?看起来您的示例代码在第一个分组中缺少一个
4
。输出是否始终为矩形。。。我还添加了代码,将每个元素提取到它自己的向量中。。对不起,少了四个。。实际数组比示例大得多。所以我需要检查1的所有向量,但它们在一个矩阵中,2,3,4的向量也是一样。非常感谢你的帮助,很好用。但是我怎样才能只为一个值生成矩阵呢?
[m1,m2,m3] = sol{:};
>> A = [1 2 3 4 5 6 0 0 0 0  7 7 7 7 7 7 0 0 0 0  4 4 4 4 4 4  ];
>> B = [1 1 1 1 1 1 0 0 0 0  2 2 2 2 2 2 0 0 0 0  3 3 3 3 3 3  ];
>> reshape(A(B~=0),nnz(B)/max(B),max(B))'

ans =
     1     2     3     4     5     6
     7     7     7     7     7     7
     4     4     4     4     4     4