使用两个不同大小的源阵列创建新的单元阵列并匹配序列号

时间:2013-07-19 06:51:52

标签: matlab vector pattern-matching string-matching cell-array

我有一个数组,其中包含一组按时间顺序排列的序列号和另一个源数组,其中随机序列号与数值相关联。我希望在MATLAB中创建一个新的单元格数组,在一列中按时间顺序排列完整的序列号,如果两个原始源数组中的序列号匹配,我希望插入相关的数值。如果他们不这样做,我只想复制之前的相关值,直到有新的匹配。

例如

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

如何在没有空值的情况下创建此单元格数组?

注意:在某些情况下可能会重复串行值 - 这些是不能(或不应该)删除的重复项,但程序可能需要忽略它们以避免无限循环。

任何关于如何实现这一目标的建议都将受到赞赏。

1 个答案:

答案 0 :(得分: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函数名作为你的变量名(即你的代码中是随机的)。