【问题标题】:What format does matlab need for n-dimensional data input?matlab输入n维数据需要什么格式?
【发布时间】:2011-09-16 01:17:43
【问题描述】:

我有一个用 Python 脚本为我正在从事的数据挖掘项目制作的 4 维字典,我想将数据读入 Matlab 以对数据进行一些统计测试。

读取二维矩阵很简单。我想,由于我的第一个维度只有 4 深,我可以将它的每个切片写入一个单独的文件(总共 4 个文件),每个文件都有许多二维切片,看起来像这样:

2 3 6
4 5 8

6 7 3
1 4 3

6 6 7
8 9 0

但这不起作用,matlab 将其读取为单个连续的 6 x 3 矩阵。我什至看了一下 dlmread 但不知道如何让它做我想做的事。如何格式化,以便可以将 3 个(或最好更多)维度放入一个文件中?

【问题讨论】:

    标签: file matlab input 3d matrix


    【解决方案1】:

    一个简单的解决方案是创建一个只有两行的文件:第一行包含目标数组大小,第二行包含所有数据。然后,您需要做的就是重塑数据。

    说你的文件是

    3 2 3
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
    

    您执行以下操作将数组读入变量data

    fid = fopen('myFile'); %# open the file (don't forget the extension)
    arraySize = str2num(fgetl(fid)); %# read the first line, convert to numbers
    data = str2num(fgetl(fid)); %# read the second line
    data = reshape(data,arraySize); %# reshape the data
    fclose(fid); %# close the file
    

    查看data,了解 Matlab 如何对多维数组中的元素进行排序。

    【讨论】:

    • 优秀的解决方案,我衷心赞同。非常感谢。
    【解决方案2】:

    Matlab 按列存储数据。因此,从您的示例中(假设它是一个 3x2x3 矩阵),matlab 会将其存储为第一个“切片”的第一、第二和第三列,然后是第二个切片的第一、第二第三列,依此类推

    2 
    4
    3
    5 
    6
    8
    6
    1
    7
    4 
    3
    3
    6
    8
    6
    9
    7
    0
    

    所以你可以像这样从 python 中写出数据(我不知道如何),然后将其读入 matlab。然后您可以reshape 将其重新转换为 3x2x3 矩阵,并且您将保留正确的顺序。

    【讨论】:

    • 这已经到了那里......我现在知道如何做到这一点,但它需要我手动弄清楚我的每个维度有多深(从执行到执行不同)。有没有办法将这些信息直接编码到输入文件中?
    • 您可能会将其写入带有标题的自定义文件,您可以在其中存储信息。一个简单的例子,在这种情况下文件的第一行将是 3(对于 3 个维度),接下来的 3 行将分别是 3、2 和 3。因此,当您在 matlab 中阅读时,您先阅读第一行,然后再阅读下一行。这会准确地告诉您有多少行/列/维度。阅读完这些内容后,您将阅读到文件的最后,然后使用此信息进行整形
    • 关闭,但我猜没有雪茄 :)
    猜你喜欢
    • 2021-05-01
    • 2013-10-07
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 2021-12-25
    • 1970-01-01
    相关资源
    最近更新 更多