【问题标题】:Extract blocks of rows from a single-column dataset to separate sequential columns从单列数据集中提取行块以分隔连续列
【发布时间】:2014-08-05 19:03:12
【问题描述】:

我有一个数据集,其中包含 1 列中的所有数据。然而,每 n 行出现一个新的子数据集。使用 MATLAB,我需要获取每个子数据集并放置在单独的顺序列中。例如,这个:

第 1 列

1
3
2
1
3
2
1
3
2

进入这个:

第 1 列 |第 2 栏 |第 3 栏 | ...

1  1  1
3  3  3
2  2  2

【问题讨论】:

    标签: matlab matrix data-extraction submatrix


    【解决方案1】:

    您可以像这样使用reshape 命令:

    my_matrix = reshape(my_vector, num_rows, num_cols);
    

    您还可以将上面的 num_cols 替换为 [] 以让 MATLAB 自动计算出需要多少列才能将数据放入 num_rows 行中。同样,您可以将num_rows 替换为[],并让MATLAB 计算出将数据放入num_cols 列所需的行数。

    请注意,如果my_vector 不包含完全 num_rows * num_cols 元素,MATLAB 将抛出错误。换句话说,如果大小不匹配,它不会用零填充或截断您的数据。

    【讨论】:

    • @user3743235 (OP) 如果您在最后一个子数据集中有较少的元素,您可以/应该添加 if-case 或逻辑索引以使用 NaNs 填充您的数据。这样做的好处是,NaNs 不会被误读为 0 数据值,并且重塑仍然适用于任何数据集。你可以用if mod(numel(data),n)~=0... 来做。我将其写为评论,因为它只是对@Engineero 解决方案的一点补充。
    • 啊,太棒了,正是我正在寻找的工具。也感谢您的补充。
    猜你喜欢
    • 1970-01-01
    • 2023-01-28
    • 2021-08-21
    • 1970-01-01
    • 2020-03-09
    • 2019-08-06
    • 2020-05-22
    • 2017-08-02
    • 2019-06-27
    相关资源
    最近更新 更多