1

こんにちは、私は 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 を分析することで、リンク (1,2)(2,3)(3,4) を持つ 2 つの新しいマトリックスを生成する必要があります。もう 1 つはリンク (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]
4

2 に答える 2

0

これはあなたが望むことだと思います。matrices(Matrix2 の列 1 の 1 の量に基づいて) 必要な個別の行列の量を含む cell 配列です。

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
于 2013-05-18T15:04:51.583 に答える