您好我是matlab的新手,我无法弄清楚如何解决问题。
我有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
和Matrix2:
1 2
2 3
3 4
1 2
2 3
3 4
4 5
Matrix2按照它们出现的顺序表示在Matrix1中找到的链接。
我想将每个块从停止1开始的块(矩阵)中的链接分开。因此,通过分析Matrix2,我应该生成2个新的矩阵,其中一个带有链接(1,2)(2,3)(3, 4)和另一个与链接(1,2)(2,3)(3,4)(4,5)。
因此,每当我找到停止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]
答案 0 :(得分:0)
我认为这可以做你想要的。 matrices
是一个单元格数组,包含所需的不同矩阵的数量(基于Matrix2第1列中的1的数量)。
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];
Matrix2=[1 2; 2 3; 3 4; 1 2; 2 3; 3 4; 4 5];
rows=find(Matrix2(:,1)==1); % find row numbers with 1 in column 1 of matrix 2)
rows=[rows(2:end); size(Matrix2,1)+1]; % ignore (obvious) first row, add end of Matrix2
nrows=size(rows,1);
matrices=cell(nrows,1);
for i=1:nrows
lb=1;
if i>1
lb=rows(i-1);
end
matrices{i,1}=zeros(rows(i)-lb,3);
for j=lb:rows(i)-1
matrices{i,1}(j-lb+1,:)=[Matrix2(j,:), Matrix1(lb+Matrix2(j,2)-2+i,2)];
end
end
具有以下结果:
>> 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
答案 1 :(得分:0)
也许它会有用。
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