处理在 Matlab 中加载的一系列文件
process a sequence of files loaded in Matlab
我在 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}=... 行之后?
我试过了,但与我一个一个单独加载文件并插入每个文件和其余过程相比,我得到了不同的平均值。
有人可以帮我解决这个问题吗?!
谢谢
文件示例:
file_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
file_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
file_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
您当前的实现将单个值 (yqvalues{k}(i)
) 传递给 mean
,而不是您期望传递的多个值。我对代码做了一些更改,以便利用 mean
找到 yqvalues
的 each row 的平均值:
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
值的数量是可变的,并将 xvalues
和 yvalues
保留为元胞数组。但是,由于 yqvalues
取决于 xq
的大小,它是一个常量,因此我们可以使用一个简单的 double
数组来表示 yqvalues
并且无需将它们放在一起cellfun
、循环或其他相关方法来计算每一行的平均值。
总的来说,我会敦促谨慎使用这种 interp1
方法,因为对于超出数据边界的 xq
值,它可能会 return 非常糟糕的结果。
我在 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}=... 行之后?
我试过了,但与我一个一个单独加载文件并插入每个文件和其余过程相比,我得到了不同的平均值。
有人可以帮我解决这个问题吗?!
谢谢
文件示例: file_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
file_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
file_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
您当前的实现将单个值 (yqvalues{k}(i)
) 传递给 mean
,而不是您期望传递的多个值。我对代码做了一些更改,以便利用 mean
找到 yqvalues
的 each row 的平均值:
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
值的数量是可变的,并将 xvalues
和 yvalues
保留为元胞数组。但是,由于 yqvalues
取决于 xq
的大小,它是一个常量,因此我们可以使用一个简单的 double
数组来表示 yqvalues
并且无需将它们放在一起cellfun
、循环或其他相关方法来计算每一行的平均值。
总的来说,我会敦促谨慎使用这种 interp1
方法,因为对于超出数据边界的 xq
值,它可能会 return 非常糟糕的结果。