【问题标题】:Merge different sized arrays into a table将不同大小的数组合并到一个表中
【发布时间】:2016-09-16 00:32:48
【问题描述】:

概述

我目前正在处理要导入 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      

问题

  • 文件大小不同,列保持固定,但行因试验而异,如 T1 和 T2 所示。
  • 每个文件的时间列都是相同的,所以我想将数据组织在一个表格中,如下所示;

    time   v1    v2    etc.
    
    0      NaN   NaN
    0.1    100   200
    0.2    200   500
    0.3    400   NaN
    0.4    150   0
    0.5    NaN   0
    

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

编辑

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

【问题讨论】:

  • 你知道先验行数最大的文件吗?
  • 只有在我将它们导入工作区后。

标签: matlab matlab-table


【解决方案1】:

您可以使用readtable 将每个文件导入table,然后使用outerjoin 以您期望的方式组合表格。如果所有数据都以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

【讨论】:

    【解决方案2】:

    我建议使用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);
    

    【讨论】:

    • 每个文件的时间列都相同”似乎暗示所有数据都从 t=0.0
    • 哦,明白了。我把它读成NaN 作为占位符。我的错。需要更多的咖啡!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 2015-12-09
    • 2018-08-13
    • 2018-06-06
    • 2019-09-09
    相关资源
    最近更新 更多