【问题标题】:OCTAVE: Loading and processing multiples files (32 files)OCTAVE:加载和处理多个文件(32 个文件)
【发布时间】:2019-04-08 15:20:20
【问题描述】:

我需要同时加载 32 个文件(扩展名为 .mat)并进行一些数学运算。因此,运行代码后,我希望得到 32 个数学结果。

问题是我尝试的所有代码都只是加载第一个或最后一个文件。

我的文件名是:21 pcb 11_01.mat; 21 印刷电路板 11_02 ....21 印刷电路板 11_32。我试过这个:

    for i=1:32 
    filename=strcat("21 pcb 11_",sprintf("%02d",i),".mat") 
    load(filename) 
    endfor 

因此,代码仅显示工作区中的最后一个文件。 我希望代码能够加载 32 个文件。

你能帮帮我吗?

【问题讨论】:

  • 加载文件会在工作空间中创建一些变量,即文件中包含的变量,文件中包含什么?如果它们具有相同的变量名,则加载最后一个文件将覆盖之前的所有变量
  • 一次只能加载一个文件,因此过程是加载文件,进行数学运算并继续下一个文件。或者,您可以一个接一个地加载所有 32 个文件,然后进行数学运算,但正如 @LuisMendo 所提到的,如果您的 *.mat 文件中的变量具有相同的名称,它们将被每个 load 操作覆盖。如果是这种情况,您希望在load 的每次迭代中将数据存储在一个唯一命名的变量中。如果没有关于 *.mat 文件中内容的更多信息,就很难再说了。
  • 感谢您的回答!它是一个 Picoscope 文件(一种示波器)。因此,在每个文件中,都有相同的变量名(称为A),但这个变量的值在每个文件中是不同的。

标签: matlab file octave


【解决方案1】:

如果您的 Picoscope 文件的长度都相同,比如 Lpico,那么这应该可以工作:

Pico=NaN*ones(32,Lpico);
for k=1:32
  filename=strcat("21 pcb 11_",sprintf("%02d",i),".mat") 
  load(filename)
  Lthisrun=length(A);
  Pico(k,1:Lthisrun)=A;
endfor 

如果它们的长度不同,则使 Lpico 与最长的 A 一样长。较短的范围输出将用 NaN 填充

【讨论】:

  • 感谢您的帮助!但它没有用。在工作区中,文件名中仍然只有文件 32 (21 pcb 11_32),而不是分隔的 32 个文件。
  • “在工作区”是什么意思?如果您输入“谁”;您应该看到数组 Pico,无论您为 Lpico 输入什么长度,其维度都是 32。然后例如绘制第三个时间序列,您将削弱 plot(Pico(3,:))。数组 Pico 是存储每个单独文件的位置。
猜你喜欢
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多