将多个文本文件导入Matlab以分析数据

时间:2016-07-17 12:35:26

标签: matlab

我是matlab的新手。所以我正在努力学习基础知识。我有8个tsv文件,名称如2004.07.01.0000.tsv,2004.07.01.0300.tsv,其中每个文件有72行和144列。我试图以矩阵形式自动将所有这些文件导入matlab,以计算平均值,中位数,偏度(用于数据校正)。我做的是我使用matlab gui导入了一个文件(2004.07.01.0000.tsv),然后生成了一个名为importfile的函数。我试图使用for循环访问这些文件中的所有数据,但我无法弄明白。我试过了(根本不确定):

for fileNum=1:8;
startRow=1;
endRow=72;
filename
a=importfile(filename, startRow, endRow);
end

1 个答案:

答案 0 :(得分:0)

如果您的importfile()函数正常工作,那么在每次for循环迭代时,您都会使用最新导入的文件覆盖a。你应该连接所有文件(即矩阵)。

矩阵级联可以通过行(即水平级联)或通过列(即垂直级联)来完成。据我所知,您需要一个垂直连接,以生成一个包含144列和单个文件所包含的行数的唯一矩阵。

因此,您应该按如下方式更改循环

myMatrix=[];
for fileNum=1:8;
    startRow=1;
    endRow=72;
    filename
    myMatrix=[myMatrix ; importfile(filename, startRow, endRow)];
end

垂直连接可以通过;运算符完成,因此像A=[B ; C]这样的指令会通过连接矩阵A和{{1}来创建矩阵B }}。在您的情况下,您将C初始化为空,然后您将垂直连接(以迭代方式)来自myMatrix的所有输出,即您的importfile()文件。

在循环结束时,.tsv的大小应为myMatrix,其中NxM为144,M是所有文件中行数的总和( 8 * 72)。

<强>更新
如果必须将文件名明确传递给N函数,则可以创建字符串的单元格数组,其中单元格的每个元素都是文件名。因此,在我们的例子中,单元格数组将类似于:

importfile()

显然你必须用适当的文件名替换单元格内的字符串,最后你可以按如下方式稍微编辑循环

filenames={'filename1.tsv','filename2.tsv',...,'filename8.tsv'};

以这种方式,在每次循环迭代时,第i个文件名将作为myMatrix=[]; for fileNum=1:8; startRow=1; endRow=72; myMatrix=[myMatrix ; importfile(filenames{i}, startRow, endRow)]; end 的输入给出,并希望它将被加载。

为了实现这个目标,你应该(让事情变得简单)

  1. 将您的Matlab脚本和显然功能importfile()放在包含.tsv文件的同一文件夹中
  2. 将所述文件夹设置为当前文件夹
  3. 或者如果您在给定文件夹中有.tsv文件而脚本在另一个文件夹中,则当前文件夹当然必须是包含脚本的文件夹,并且单元格数组importfile()内的文件名必须包含整个路径,而不仅仅是正确的文件名。