2

私は2つの行列を持ってい22007x3ます352x2. それぞれの最初の列はインデックスで、そのほとんど (すべてではない) が共有されています (つまり、x1 には x2 にないインデックスが含まれています)。

2 つの行列を 1 つの行列に結合して、22007x4列 4 に両方の元の行列の特定のインデックスに対応する値が入力されるようにします。

例えば:

x1 =
    1   1   5
    1   2   4
    1   3   5
    2   1   1
    2   2   1
    2   3   2

x2 =
    1   15.5
    2   -5.6

になる

x3 =
    1   1   5   15.5
    1   2   4   15.5
    1   3   5   15.5
    2   1   1   -5.6
    2   2   1   -5.6
    2   3   2   -5.6

私はの線に沿って何かを試しました

x3(1:numel(x1),1:3)=x1;
x3(1:numel(x2(:,2)),4)=x2(:,2);

しかし、最初にエラーが発生します

??? Subscripted assignment dimension mismatch.

そして、残りを埋めるかどうかわかりません。

重要な点は、データのインデックスあたりの行数が必ずしも同じではないということです。

どうすればこれを機能させることができますか?

4

1 に答える 1

3

ここからアムロの答えを取る

[~, loc] = ismember(x1(:,1), x2(:,1)); 

ismember の 2 番目の引数は、x1 の各要素が見つかる x2 内の位置を返します (見つからない場合は 0)。

a = x2(loc(loc > 0), 2);

これらの行インデックスを使用して関連する値を取得しますが、ゼロを除外するため、loc > 0マスクになります。これらを 1 として除外する必要があります。これらは x2 にはなく、2 ではインデックスを作成できません0

x1 の最後に固定するデフォルト値の新しい列を作成します。おそらく良いと思いますNaN()が、多分zeros()大丈夫です

newCol = NaN(size(x1,1),1)

次に、論理インデックスを使用してゼロ以外の要素の場所を取得しa、それらの場所に配置します

newCol(loc > 0) = a

最後に最後に貼り付けます

x3 = [x1, newCol]
于 2013-04-25T14:30:12.093 に答える