【问题标题】:process a sequence of files loaded in Matlab处理在 Matlab 中加载的一系列文件
【发布时间】:2015-12-28 22:55:44
【问题描述】:

我在 matlab 中加载了一系列文件,我正在尝试进行如下插值:

numfiles = 10;
data = cell(1, numfiles);
xvalues=[];
yvalues=[];
yqvalues=[];
xq=linspace(-10,10,1000);
for k = 1:numfiles
   file = sprintf('filename_%d', k);
   data{k} = importdata(file);
   xvalues{k} = data{k}(:,1);
   yvalues{k} = data{k}(:,2);
   yqvalues{k}= interp1(xvalues{k},yvalues{k},xq,'spline');
end

到目前为止,一切正常,我得到了正确的尺寸。

  [1x1000 double]    [1x1000 double]    [1x1000 double]    [1x1000 double]    [1x1000 double]    [1x1000 double]    [1x1000 double]    [1x1000 double]    [1x1000 double]    [1x1000 double]

现在我想计算每个 xq 的平均值。所以我应该有一个 1*1000 值的数组。我该怎么做?使用这个循环是否正确

for i=1:length(xq)
      m(i)=mean(yqvalues{k}(i));
end

在第一个循环内的 yqvalues{k}=... 行之后?

我试过这个,但与我一个一个单独加载文件并插入每个文件和其余过程相比,我得到了不同的平均值。

有人可以帮我解决这个问题吗?!

谢谢

文件示例: 文件_1

-14.7812 0.25
-14.7712 0.36
-14.7612 0.20
-14.7512 0.14
-14.7412 0.05
-14.7312 0.05
-14.7212 0.1
-14.7112 0
-14.7012 0.25
-14.6912 0.23

文件_2

-14.8289 0.34
-14.8189 0
-14.8089 0.1
-14.7989 0.08
-14.7889 0.15
-14.7789 0.22
-14.7689 0
-14.7589 0
-14.7489 0.28
-14.7389 0.36

文件_3

-14.7813 0.05
-14.7713 0.25
-14.7613 0.17
-14.7513 0
-14.7413 0
-14.7313 0.09
-14.7213 0.02
-14.7113 0.18
-14.7013 0.30
-14.6913 0.04

对于这些文件,我期望平均值为:

 D5_1 =

   1.0e+09 *

  Columns 1 through 13

   -0.0000   -0.0002   -0.0022   -0.0082   -0.0203   -0.0408   -0.0718   -0.1156   -0.1743   -0.2501   -0.3453   -0.4619   -0.6022

  Columns 14 through 20

   -0.7684   -0.9627   -1.1872   -1.4441   -1.7357   -2.0641   -2.4315

但我得到的是:

D_5 =

   1.0e+04 *

  Columns 1 through 13

   -0.0381   -0.0184   -0.0070   -0.0016   -0.0000    0.0000   -0.0001   -0.0026   -0.0120   -0.0325   -0.0686   -0.1245   -0.2047

  Columns 14 through 20

   -0.3135   -0.4552   -0.6343   -0.8549   -1.1217   -1.4387   -1.8105

【问题讨论】:

  • 您要我上传文件吗?我不知道该怎么做!!! :/ @excaza
  • 您不必上传文件来创建重现您的问题的最小示例。组成 5-6 个 xvaluesyvalues 来重现您在运行上述代码时遇到的行为。
  • 我添加了三个文件作为示例。你可以试试 xq=linspace(-15,-14,20)! @excaza
  • 对于给定的文件,m 的接收值与您的预期有何不同?

标签: matlab mean


【解决方案1】:

您当前的实现将单个值 (yqvalues{k}(i)) 传递给 mean,而不是您希望传递的多个值。为了利用mean 来查找each rowyqvalues 的平均值,我对代码进行了一些更改:

numfiles = 3;
xvalues = cell(1, numfiles);
yvalues = cell(1, numfiles);
xq = linspace(-10,10,1000);
yqvalues = zeros(length(xq), numfiles);

for k = 1:numfiles
    file = sprintf('file_%u.txt', k);
    data = importdata(file);
    xvalues{k} = data(:,1);
    yvalues{k} = data(:,2);
    yqvalues(:,k) = interp1(xvalues{k}, yvalues{k}, xq, 'spline');
end

m = mean(yqvalues, 2);

我将假设每个文件中 XY 值的数量是可变的,并将 xvaluesyvalues 保留为元胞数组。然而,由于yqvalues 取决于xq 的大小,它是一个常量,因此我们可以为yqvalues 使用一个简单的double 数组,而无需将cellfun、循环或其他相关方法来查找每行的平均值。


除此之外,我建议谨慎使用这种interp1 方法,因为对于超出数据边界的xq 值,它可能会返回非常糟糕的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多