Matlab 如何在特定条件下从一个矩阵创建两个或多个矩阵?
你好,我是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,我应该
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