0

次のデータ(または同様のデータ)があります。

  154240           1           7
  154240           2           2
  154240           5           6
  154240           2           5
  154240           6           7
  154240           2           7
  154240           5           6
  154240           6           7
  154240           4           6
  154240           4           6
  154240           4           6

  641224           2           3
  641224           2           1
  641224           2           3
  641224           1           2

  641311           5           5
  641311           7           5

[ラットのタグ番号、x 座標、y 座標] の形式のデータを表します (ラットの集団を調べているように)。タグの同じ値のそれぞれについて、最初の x & y エントリに対する x & y の変位を計算したいと思います。つまり、[tag番号をもう一度、(0,x2-x1,x3-x1,x4-x1 など),(0,y2-y1,y3-y1,y4-y1 など)] しかし、私は今困惑しています。

どんな助けでも大歓迎です!

4

2 に答える 2

0

あなたがすでに行列を持っていると仮定します

A = [tag,x,y];

あなたはただ試してみるべきです

disp(:,1) = A(:,1);    
disp(:,2) = arrayfun(@(ii) A(ii,2) - A(1,2),1:size(A,1));
disp(:,3) = arrayfun(@(ii) A(ii,3) - A(1,3),1:size(A,1));

これがお役に立てば幸いです。

于 2013-01-28T22:40:58.800 に答える
0

最も簡単な方法は、最初にデータを単一のタグのみを含むデータセットのセル配列に分割することだと思います。次に、各データセットから最初の行を差し引くだけです。

関数を使用してdiff、最初の列が変化するインデックスを見つけることができます。これにより、データを分割するすべてのポイントが得られます。このようなもの:

splits = find([1; diff(M(:,1)) ~= 0; 1])

これを分解すると、最初の行は常に関心のあるポイントであると言います。次に、インデックスが変化する任意の行が重要です。最後に、最後の行のの行も注目のポイントです。

あなたのデータでそれを実行すると、次のようになります。

splits =

     1
    12
    16
    18

そして健全性テスト:

>> M(splits(1:end-1),:)

ans =

      154240           1           7
      641224           2           3
      641311           5           5

これで、興味のある範囲を構築できます。

>> ranges = [splits(1:end-1), splits(2:end)-1]

ranges =

     1    11
    12    15
    16    17

次に、マトリックスから関連する行を次のようにセル配列に抽出できます。

D = arrayfun( @(x) M(ranges(x,1):ranges(x,2),:), 1:size(ranges,1), 'uniformoutput', false )

これで、各セルが 1 つのタグ付きデータセットを表す 3 列の行列のセル配列ができました。ここにそれらの1つがあります:

>> D{2}

ans =

      641224           2           3
      641224           2           1
      641224           2           3
      641224           1           2

これで、セルを調べて、残りの行から最初の行を減算する操作を適用できます。これにはさまざまな方法があります。それはあなたのための練習です。

于 2013-01-28T22:33:51.950 に答える