将不同大小的数组合并成 table

Merge different sized arrays into a table

概览

我目前正在处理要导入到 MATLAB 中的一系列 .txt 文件。为简单起见,我将从概念上展示我的问题。强制性的,我是 MATLAB(或一般编程)的新手。

这些 .txt 文件包含来自跟踪视频中的 ROI(逐帧)的数据,第一列为时间 ('t'),第二列为速度 ('v')如下图;

T1 =           T2 =            etc.

t     v       t     v

0    NaN      0     NaN
0.1  100      0.1   200 
0.2  200      0.2   500
0.3  400      0.3   NaN
0.4  150       
0.5  NaN      

问题

请注意,我想在较短的试验结束时添加 0(或 NaN)以解决大小差异问题。

编辑

这两种解决方案都适用于我的数据集。我感谢所有的帮助!

您可以使用 readtable and then use outerjoin 将每个文件导入 table 以按照您期望的方式合并表格。如果所有数据都以 t = 0 开始,这将起作用。

从文件创建 table

T1 = readtable('filename1.dat');
T2 = readtable('filename2.dat');

然后执行outerjoin(为演示目的而创建的伪数据)。

t1 = table((1:4)', (5:8)', 'VariableNames', {'t', 'v'});

%//     t    v
%//     _    _
%//     1    5
%//     2    6
%//     3    7
%//     4    8

% t2 is missing row 2
t2 = table([1;3;4], [1;3;4], 'VariableNames', {'t', 'v'});

%//     t    v
%//     _    _
%//     1    1
%//     3    3
%//     4    4

%// Now perform an outer join and merge the key column
t3 = outerjoin(t1, t2, 'Keys', 't', 'MergeKeys', true)

%//     t    v_t1    v_t2
%//     _    ____    ____
%//     1    5         1
%//     2    6       NaN
%//     3    7         3
%//     4    8         4

我建议使用 padarrayhorzcat 函数。他们分别:

  1. 用额外数据填充矩阵或向量,有效地添加额外的 0 或任何指定值(NaNs 也可以)。
  2. 水平连接矩阵或向量。

首先,尝试获取要连接的最长向量的长度。我们称此值为 max_len。一旦你有了它,你就可以通过做填充每个向量:

v1 = padarray(v1, max_len - length(v1), 0, 'post');
% You can replace the '0' by any value you want !

最后,一旦你有相同大小的向量,你可以使用 horzcat 连接它们:

big_table = horzcat(v1, v2, ... , vn);