我遇到与here类似的问题。但是,似乎没有解决方案。
我的问题是这样的:我需要导入一些文件,例如,5。每个文件中有20列,但行数是多种多样的。第1列是曲柄角度的时间,其余是数据。
所以我的代码首先导入所有文件,找到行数最多的文件,然后创建一个包含多行的多维数组。时间是在引擎周期中,因此,我将从导入的文件中删除超出整个引擎周期的行。这样,我总是有X个整个发动机循环的数据。然后我只是将数据插入到预先分配的数组中,以便为5个数据文件创建一个巨大的多维数组。
但是,这似乎总是导致每个页面的每一列的最后一行都填充了NaN。请看下面的代码。我无法看到我做错的地方。哦,顺便说一句,因为我之前被搞砸了,这不是功课。
maxlines = 0;
maxcycle = 999;
for i = 1:1
filename = sprintf('C:\\Directory\\%s\\file.out',folder{i});
file = filelines(filename); % Import file clean
lines = size(file,1); % Find number of lines of file
if lines > maxlines
maxlines = lines; % If number of lines in this file is the most, save it
end
lastCAD = file(end,1); % Add simstart to shift the start of the cycle to 0 CAD
lastcycle = fix((lastCAD-simstart)./cycle); % Find number of whole engine cycles
if lastcycle < maxcycle
maxcycle = lastcycle; % Find lowest number of whole engine cycles amongst all designs
end
cols = size(file,2); % Find number of columns in files
end
lastcycleCAD = maxcycle.*cycle+simstart; % Define last CAD of whole cycle that can be used for analysis
% Import files
thermo = zeros(maxlines,cols,designs); % Initialize array to proper size
xq = linspace(simstart,lastcycleCAD,maxlines); % Define the CAD degrees
for i = 1:designs
filename = sprintf('C:\\Directory\\%s\\file.out',folder{i});
file = importthermo(filename, 6, inf); % Import the file clean
[~,lastcycleindex] = min(abs(file(:,1)-lastcycleCAD)); % Find index of end of last whole cycle
file = file(1:lastcycleindex,:); % Remove all CAD after that
thermo(:,1,i) = xq;
for j = 2:17
thermo(:,j,i) = interp1(file(:,1),file(:,j),xq);
end
sprintf('file from folder %s imported OK',folder{i})
end
thermo(end,:,:) = []; % Remove NaN row
非常感谢你的帮助!
答案 0 :(得分:1)
你的样品超出了范围吗?如果是这样,你需要告诉interp1
你想要外推
interp1(file(:,1),file(:,j),xq,'linear','extrap');