0

再一次,对不起,如果之前有人问过这个问题,如果它太具体了,但我很困惑,找不到解决方案。

我有一个名为 2、4 和 16 的结构的 3 个成员的矩阵(在第 1 列中),它们的值沿着它们的相对距离,例如成员 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.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 回答