0

繰り返しますが、これが以前に尋ねられたものであり、具体的すぎる場合は申し訳ありませんが、私は非常に行き詰まっており、解決策を見つけることができません.

2、4、16 (列 1) と呼ばれる構造の 3 つのメンバーのマトリックスがあり、それらの相対的な距離に沿った値があります。たとえば、メンバー 2 は、最初の 0m、次に 0.5m で、その長さの終わりに値を持ちます。 1.5m、メンバー 4 は 0m などから始まるので、マトリックスは次のようになります。

2   0     125
2   0.5   25
2   1.5   365
4   0     25
4   0.6   57
16  0     354
16  0.2   95
16  0.8   2

そして、すべてのメンバー 2、4、および 16 を組み合わせた全体の距離を持つマトリックスを作成したいと考えています。

2   0     125
2   0.5   25
2   1.5   365
4   1.5   25
4   2.1   57
16  2.1   354
16  2.3   95
16  3.1   2

matlabでこれを行う方法はありますか? おそらく最初のゼロを見つけて、その上の値を下の残りのすべての値に追加してから、次のゼロ値を見つけますか?

これが明確でない場合は教えてください。少し混乱していると思いますが、どう説明すればよいかわかりません!

4

2 に答える 2

3

私は次のことを思いつきました:

idx = find(diff(M(:,1)));
v = zeros(size(M,1),1);
v(idx+1) = M(idx,2);
M(:,2) = M(:,2) + cumsum(v);

結果:

M =
            2            0          125
            2          0.5           25
            2          1.5          365
            4          1.5           25
            4          2.1           57
           16          2.1          354
           16          2.3           95
           16          2.9            2

2 番目の列の最後の値は、説明した内容と一致しないことに注意してください ( 2.9vs 3.1)。タイプミスしたか、まだ理解できていない...

于 2012-07-24T15:00:22.883 に答える
0
data = [2   0     125;
        2   0.5   25;
        2   1.5   365;
        4   0     25;
        4   0.6   57;
        16  0     354;
        16  0.2   95;
        16  0.8   2];

idx0 = find(data(:,2)==0);
idx0 = idx0(2:end); %ignore first zero of first member, doesn't need an offset

offset = data(idx0-1,2);
N = size(data,1);
for ii=1:numel(idx0)
    idxs = 1:N>=idx0(ii);
    data(idxs,2) = data(idxs,2) + offset(ii);
end
于 2012-07-24T14:57:22.263 に答える