我有一个数组,其中包含一组按时间顺序排列的序列号和另一个源数组,其中随机序列号与数值相关联。我希望在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
如何在没有空值的情况下创建此单元格数组?
注意:在某些情况下可能会重复串行值 - 这些是不能(或不应该)删除的重复项,但程序可能需要忽略它们以避免无限循环。
任何关于如何实现这一目标的建议都将受到赞赏。
答案 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函数名作为你的变量名(即你的代码中是随机的)。