MATLAB:如何根据来自不同数组的行/列索引将 NaN 值添加到不存在数据的数组中?



我有两个数据集数组,A和B。它们是两种不同的独立测量(例如某些物体的气味和颜色(。

对于 A 和 B 中的每个数据条目,我都有一个时间t和一个测量的位置p。大多数气味和颜色测量是在同一时间和地点进行的。但是,有时缺少数据(即在某些时候没有颜色测量,只有气味测量(。同样,在某些位置缺少某些数据(即在某些位置只有颜色测量而没有气味测量(。

我想构建具有相同大小的 A 和 B 数组,其中每行对应于所有时间的完整集合,每列对应于所有位置的完整集合。如果缺少数据,我希望该条目为 NaN。

下面是我想做的一个例子:

%Inputs    
A = [0 0 1 2 4; 1 1 3 3 2; 4 4 1 0 3];
t_A = [0.03 1.6 3.9]; %Times when A was measured (rows of A)
L_A = [1.0 2.9 2.98 4.2 6.33]; %Locations where A was measured (columns of A)
B = [10 13 10 10; 15 13 13 12; 14 14 13 12; 15 19 11 13];
t_B = [0.03 1.6 1.9 3.9]; %Times when B was measured (rows of B)
L_B = [2.1 2.9 2.98 5.0]; %Locations where B was measured (columns of B)

我想要的是一些代码将这些数据集转换为以下内容:

t = [0.03 1.6 1.9 3.9];
L = [1.0 2.1 2.9 2.98 4.2 5.0 6.33];
A_new = [0 NaN 0 1 2 NaN 4; 1 NaN 1 3 3 NaN 2; NaN NaN NaN NaN NaN NaN NaN;  4 NaN 4 1 0 NaN 3];
B_new = [NaN 10 13 10 NaN 10 NaN; NaN 15 13 13 NaN 12 NaN; NaN 14 14 13 NaN 12 NaN; NaN 15 19 11 NaN 13 NaN];

新数组 A_new 和 B_new 的大小相同,向量 t 和 L(对应于行和列(是连续的。原始 A 在t= 1.9 时没有数据,因此在 A_new 的第 3 行,存在所有 NaN 值。同样,A_new中的第 2 列和第 6 列以及B_new中的第 1、5 和 7 列也是如此。

如何在 MATLAB 中快速为大型数据集执行此操作?

创建一个NaNs 的矩阵,使用unique函数的第三个输出将浮点数转换为整数索引,并使用矩阵索引来填充矩阵:

[t,~,it] = unique([t_A t_B]);
[L,~,iL] = unique([L_A L_B]);
A_new = NaN(numel(t),numel(L));
A_new(it(1:numel(t_A)),iL(1:numel(L_A))) = A;

B_new = NaN(numel(t),numel(L));
B_new(it(numel(t_A)+1:end),iL(numel(L_A)+1:end)) = B;

最新更新