【问题标题】:Reading many (1000+) files with dlmread - Loop with varying filenames?使用 dlmread 读取许多(1000 多个)文件 - 使用不同文件名的循环?
【发布时间】:2016-11-25 09:11:33
【问题描述】:

我对 matlab 或编码非常陌生。

我正在运行一个输出数千个文件的模拟。这些文件是 .vtk 并且被 dlmread 正确读取。

我尝试阅读其中一个,将其定义为矩阵并从该矩阵中提取列向量。这工作正常。我现在需要的不仅是阅读其中一个,而且是全部。文件名因数字而异,例如cover1000.vtk、cover2000.vtk、....、cover1200000.vtk。

我希望所有这些都可以使用 dlmread 读取并存储为不同的矩阵。我怎么做?这是我现在所拥有的,一次处理一个文件:

A_1000 = dlmread ('cover1000.vtk') %matrix a containing values from vtk file_in_loadpath

fx_1000 = A(1:20,1) %extracting vector with specific values

fx_ave_1000 = sum(fx_1000)/length(fx_1000) % average of the values in extracted vector

我正在考虑一个循环,但是如何创建一个具有不同文件名的循环? 另外我读到循环不是最好的主意,单元格数组会更好。但我完全不知道如何实现这些。

感谢您的帮助!
干杯

【问题讨论】:

  • 你所有的文件都存放在一个目录下吗?
  • 是的。它们的名称仅因数字而异,例如cover1000.vtk、cover2000.vtk...数字之间的差异通常为1000,并且在所有文件中都是恒定的。

标签: arrays matlab matrix vector vtk


【解决方案1】:

您可以使用函数dir 列出您目录中的所有 vtk 文件,然后遍历这些文件。

filename = dir('*.vtk'); %list all the vtk files in your current directory.

for ii = 1:length(filename)
A = dlmread (filename(ii).name) %matrix a containing values from vtk file_in_loadpath
fx{ii} = A(1:20,1) %extracting vector with specific value
fx_ave{ii} = sum(fx{ii})/length(fx{ii}) % average of the values in extracted vector
end

结果现在存储在两个单元格中:fxfx_ave

【讨论】:

  • 非常感谢!这行得通。留给我的唯一一件事就是找出如何从 fx_ave 访问值,但这应该可以通过元胞数组的文档来实现。
  • 欢迎您,只需写:fx_ave{1} 即可访问文件filename(1).name 的数据。 fx_ave{2}访问文件filename(2).name的数据...
  • 谢谢!但不知何故有一个错误。例如,如果我提取一个向量 fx{550},我没有得到正确的值,它们会稍微偏离一点。我尝试查看文件 549、550、551,但没有一个文件显示 matlab 显示的值。我不知道错误可能出在哪里,因为 fx 没有对任何值进行平均,它应该显示我在文件中看到的内容。
  • @matejmarti 文件不一定要按数字顺序读取。查看dir 的输出以查看文件的顺序。
  • 感谢@excaza,可能就是这样!我会调查的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 2011-08-11
相关资源
最近更新 更多