1

一連の年代順のシリアル番号を持つ配列と、数値に関連付けられたランダムなシリアル番号を持つ別のソース配列があります。MATLAB で新しいセル配列を作成し、1 つの列に完全に時系列のシリアル番号を付けて、次の列に元の両方のソース配列でシリアル番号が一致する場合に関連する数値を挿入したいと考えています。そうでない場合は、新しい一致が見つかるまで、以前に関連付けられた値をコピーしたいだけです。

例えば

source input (serial)
1
2
3
4
5
6
7

source input (random)
1    100
2    105 
4    106
7    107

desired output (data)
SR No           Value
1               100
2               105
3               105
4               106
5               106
6               106
7               107

現在、私が抱えている問題は、以下のコードを実行するたびに、(正しく動作している) プログラムによって繰り返し値が挿入されるはずのセル値が空のセルになってしまうことです。つまり、シリアル番号 3、5-29 の行で、等

これまでに得たコードは次のとおりです。

j = 1;
A = {serial{1:end,1}};
B = cell2mat(A);
value = random(1,2);
data(:,1) = serial(:,1);

for k = 1:length(random)

    [row, col, vec] = find(B == random{k,1});
    tf = isempty(vec);

    if (tf ~= 1)
        value = random(row,2); 
        data(j,2) = random(row,2);
        j = j + 1;
    else
        data(j,2) = value;
        j = j + 1;
    end
end

空の値なしでこのセル配列を作成するにはどうすればよいですか?

注: 場合によっては、シリアル値が繰り返されることがあります。これらは削除できない (または削除すべきではない) 重複ですが、無限ループを回避するためにプログラムで無視する必要がある場合があります。

これを達成する方法についての提案をいただければ幸いです。

4

1 に答える 1

1

そんな感じ?

serial = {1,2,3,4,5,6,7};
random = {1,100; 2, 105; 4, 106; 7, 107;};

data(:,1) = cell2mat(serial)';
data(:,2) = NaN;

for k=1:size(random,1)
    data(data(:,1)==random{k,1},2) = random{k,2};
end
for k=2:size(data,1)% what if there is no value for first serial number?
    if isnan(data(k,2))
        data(k,2) = data(k-1,2);
    end
end
disp(data)

ところで: MATLAB 関数名を変数名 (つまり、コード内でランダム) として使用しないことをお勧めします。

于 2013-07-19T09:43:17.250 に答える