我试图在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:
现在,我需要将x1
和y1
(与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]'
答案 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