根据matlab将分割矩阵分成几个

时间:2015-04-01 16:18:24

标签: matlab

我试图在matlab中将nx3矩阵拆分为子矩阵。所以我的矩阵C具有这种形状

C =
 1     1     1
 0     0     0
 0     0     0
 1     1     1
 1     1     1
 1     1     1
 0     0     0
 1     1     1
 1     1     1

它有一行零或一行。我想将此矩阵拆分为仅保留矩阵的矩阵。所以这里有例如三个''一些。所以我想得到

C1 =
 1     1     1

C2 =
 1     1     1
 1     1     1
 1     1     1

C3 =
 1     1     1
 1     1     1

然而我的真实矩阵是n乘3,所以我不知道它们在哪里。

修改1:

现在,我需要将x1y1(与C长度相同的单个行向量)拆分为x(1), x(2),..(类似于y向量)基于矩阵C如何拆分

示例输入:

x1 = (1:9)';
y1 = (2:2:18)';

期望输出:

x(1)=[1], x(2)=[4 5 6]' and x(3)=[8 9]'
y(1)=[2], y(2) =[8 10 12]' and y(3)=[16 18]'

2 个答案:

答案 0 :(得分:1)

对第一列使用find函数来查找1元素的索引。然后,计算所获得的矢量的任何两个连续元素之间的相对距离以确定边界。之后,使用矩阵索引来获取1元素矩阵的块。如果你有更好的主意,请告诉我。

c=[1     1     1;
     0     0     0;
     0     0     0;
     1     1     1;
     1     1     1;
     1     1     1;
     0     0     0;
     1     1     1;
     1     1     1;]
b=c(:, 1);
find(b);

我会把剩下的留给自己。

答案 1 :(得分:0)

<强>输入:

c = [1     1     1;
     0     0     0;
     0     0     0;
     1     1     1;
     1     1     1;
     1     1     1;
     0     0     0;
     1     1     1;
     1     1     1;]    

x1 = (1:9)';

y1 = (2:2:18)';

<强>代码:

elementalLengthA = cellfun('length',regexp(sprintf('%i',all(C,2)),'1+','match'));
elementalStartA = regexp(sprintf('%i',all(C,2)),'1+','start');
result = cell(length(elementalLengthA),1);
x = cell(length(elementalLengthA),1);
y = cell(length(elementalLengthA),1);
for i = 1:length(elementalLengthA)
    result(i) = {C(elementalStartA(i):elementalStartA(i)+elementalLengthA(i)-1,:)};
    x(i) = {x1(elementalStartA(i):elementalStartA(i)+elementalLengthA(i)-1,:)};
    y(i) = {y1(elementalStartA(i):elementalStartA(i)+elementalLengthA(i)-1,:)};
end

<强>输出:

>> cell2mat(result(1))
ans =
 1     1     1

>> cell2mat(result(2))
ans =
 1     1     1
 1     1     1
 1     1     1

>> cell2mat(result(3))
ans =
 1     1     1
 1     1     1

>> cell2mat(x(3))  %similarly do it for other cells to get results
ans =
 8
 9