【问题标题】:processing multiple data files in matlab在matlab中处理多个数据文件
【发布时间】:2020-11-26 20:01:44
【问题描述】:

我想在matlab中读取多个文件并从每个文件中提取特定数据,然后从每个文件中提取的数据应该存储在多个文本文件中(txt文件的数量与mat文件的数量相同) .

示例:假设我有两个文件 FileA.mat 和 FileB.mat。从 filaA.mat 中提取的数据应处理并存储在 txt 文件 (FileA.txt) 中。 FileB.mat 的过程相同。

我为一个文件做了这个过程,但我如何为多个文件做这个过程?

每个文件包含多个数据。我需要为前 290 行提取变量(RigidBodies.Positions、RigidBodies.Rotations)中的数据。 应从每个文件中提取数据并存储在单独的 txt 文件中。

对于一个文件,读取数据,对其进行处理,然后将其存储在一个txt文件中:

load(strcat('Test.mat'));
pos=Test.RigidBodies.Positions(:,:,1:290);
b=Test.RigidBodies.Rotations(:,:,1:290);

for i = 1:290
    c(:,:,i)=reshape(b(:,:,i),3,3);
    rot(:,:,i)=rotm2eul(c(:,:,i));
end

trajdata=[pos,rot]; 
trajdata=reshape(trajdata,6,290)';
a=zeros(290,1);
trajdata=[trajdata,a];
save('data1.mat', 'data');
load('data1.mat')
dlmwrite('test1.txt', data, 'delimiter','\t','newline','pc')

这些是我发现要读取多个文件的内容:

mat = dir('*.mat'); 
for q = 1:length(mat) 
load(mat(q).name); 
data(q,:,:) = Testing0006.RigidBodies.Positions(:,:,1:290)
end

但是如何更改 for 循环内的文件名? 喜欢:

pos=**Test**.RigidBodies.Positions(:,:,1:290);
b=**Test**.RigidBodies.Rotations(:,:,1:290);

我怎样才能将第二个循环放在第一个循环中,就像我对 c 所做的那样,并在我的原始代码中腐烂?

感谢任何帮助。 谢谢

【问题讨论】:

  • 您的问题已回滚到其初始形式。如果您有后续问题,请提出 问题,而不是重新利用当前问题 - 这样答案就保持相关性。欢迎,并享受这个网站!

标签: matlab


【解决方案1】:

您可以尝试使用 mat 文件的名称检索变量(如果它对应于包含变量的名称,在您的示例中为 mat(q).name == Testing0006)

for q = 1:length(mat) 
    load(mat(q).name);
    [~, testName, ~] = fileparts(mat(q).name);
    testVar = eval(testName); 
    data(q,:,:) = testVar.RigidBodies.Positions(:,:,1:290)
end

如果你不需要变量在工作区,你可以给load(mat(q).name)添加一个返回值

for q = 1:length(mat) 
    tmp = load(mat(q).name);
    [~, testName, ~] = fileparts(mat(q).name);
    data(q,:,:) = tmp.(testName).RigidBodies.Positions(:,:,1:290)
end

【讨论】:

  • 我在尝试为多个文件构建代码时遇到了另一个问题。我更改了描述,您能帮帮我吗?
  • @kamel 请不要在回答后更改问题。如果您有新问题,请在单独的帖子中提出。
  • 我没有改变问题,我用你的答案来修改我的代码。我的目标是让我的代码处理多个文件并将结果写入多个文本文件。您的回答只是解决方案的一部分。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 2011-04-06
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多