【问题标题】:Sequential post processing and plotting with Matlab使用 Matlab 进行顺序后处理和绘图
【发布时间】:2014-03-17 12:22:06
【问题描述】:

我正在尝试执行以下操作:

导入一个大数据文件(类似于 300x50000)。然后我需要对其中的一些列进行后处理:

  1. 取特定列的平均值(例如第 3、7、18 等)
  2. 使用 CaseX_3rd、CaseX_7th、CaseX_18th 之类的内容保存每一列
  3. 针对另一个向量(某个位置)绘制 + 保存每个 CaseX_3rd 等的平均值。

最后,对另一个案例重复上述操作。

谁能推荐一些 Matlab 代码来做到这一点?我仍然对 Matlab 的正常工作缺乏经验。这就是我卡住的地方:

% loading files
Case7 = dlmread('Case7.dat', '', 3, 0);

% number of columns that I need data from (no particular sequence..) 
cols = [16, 28, 40, 52, 64, 76, 88, 100]; 

% Generating colum names 
fid = fopen('FNumber.txt', 'wt');
for i = 1:length(cols)
    fprintf(fid, 'FNumber_%d\n', i);
end 

% Reading dat file with colum names 
FNumber = importdata('FNumber.txt'); 

% Trying to assign the column with the name 
% Length of FNumber ought to be the same as column numbers wanted 

% This is where I am properly stuck: 
for i=1:length(cols)
    ith_col = num2str(col(i));
    ith_FNumber = FNumber{i}
    ith_FNumber = Case7(:,i)     % I know this doesn't work, but have no alternative
end 


% The above isn't working, so I'm not going to proceed with the rest of 
% the pseudo-code. 

提前致谢。

【问题讨论】:

  • 如果您发布您已经尝试过的代码以及为什么它不起作用,您将有更好的机会获得答案。 SO上的人通常不喜欢为别人编写整个代码......
  • 事实上,SO 上的人通常也不喜欢自己编写整个代码;-)
  • 不想获得免费代码...但感谢“友好”的建议。
  • 感谢您发布代码!有一件事是,在使用不同的功能读取文件之前,您不会关闭写入 ('Fnumber.txt') 的文件……我不知道这是否会导致问题。第二个是,你能解释一下“这不起作用”是什么意思吗?在我看来它不应该给出任何语法错误,所以我没有看到直接的问题......

标签: matlab variables for-loop import save


【解决方案1】:

ith_FNumber = FNumber{i} 永远不会做任何事情,只会给一个名为 ith_FNumber 的变量赋值 - 我猜你想创建一堆不同名称的变量?

首先,您不应该尝试这样做。尝试创建一堆名为CaseX_3rd, CaseX_7th, CaseX_18th 的变量在 MATLAB 中是个坏主意。从技术上讲,您可以这样做(使用不得命名的函数),但有更好的处理方法。在许多情况下,这涉及到使用 structcell 变量。

假设您的目录中有一堆'*.dat' 文件,这是一个使用struct 的示例,并假设您需要为所有数据提供相同的列集:

Files = ls('Case*.dat');
cols = [16, 28, 40, 52, 64, 76, 88, 100]; 

for n = 1:size(Files,1);

   % assuming you don't need the rest of the data
   temp = dlmread(Files(n,:), '', 3, 0);

   % just to make it easier to check what's what
   mystruct(n).filename = Files(n,:);

   % we can take all the columns at once
   mystruct(n).data = data(:,cols);

   % mean works along columns by default so we can do this too
   mystruct(n).mean = mean(mystruct(n).data);  

end

然后,如果您需要进一步处理/绘制这些数据,您可以轻松地遍历您导入的所有数据。

【讨论】:

  • 非常感谢。我显然是想在一个方孔里敲一个圆钉。感谢您的提示。现在,您为什么建议创建变量不是一个好主意?我从一个类似的页面得到这个:mathworks.com/matlabcentral/answers/… 我将研究结构是如何工作的,你的大纲应该让我开始。再次感谢。
  • MATLAB 的设置方式,如果您想对多组数据使用相同的函数,则使用结构或单元格会变得非常容易。正如我所提到的,您可以在技术上创建和使用多个命名变量,使用一个名为 eval 的函数,但即使是 eval 的帮助文件也有一个部分“为什么要避免使用 eval 函数?”这指向您使用结构和单元格。 (这里也被称为evil)。
猜你喜欢
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2015-11-28
  • 1970-01-01
相关资源
最近更新 更多