我是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
答案 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
的输入给出,并希望它将被加载。
为了实现这个目标,你应该(让事情变得简单)
importfile()
放在包含.tsv文件的同一文件夹中或者如果您在给定文件夹中有.tsv文件而脚本在另一个文件夹中,则当前文件夹当然必须是包含脚本的文件夹,并且单元格数组importfile()
内的文件名必须包含整个路径,而不仅仅是正确的文件名。