我需要将.txt数据文件导入Matlab。该文件已分为3列。每列都有给定变量的特定数字。脚本代码必须能够执行以下操作,
要求
1)将数据从txt导入Matlab
2)如果值超出某个范围,Matlab应该从列中删除值
3)Matlab应该告诉哪一行和哪种类型的错误。
我的方法
我尝试过使用以下方法,
function data = insertData(filename)
filename = input('Insert the name of the file: ', 's');
data = load(filename);
Column1 = data(:,1);
Column2 = data(:,2);
Column3 = data(:,3);
%Ranges for each column
nclm1 = Column1(Column1>0);
nclm2 = Column2(Column2 >= 10 & Column2 <= 100);
nclm3 = Column3(Column3>0);
%Final new data columns within the ranges
final = [nclm1, nclm2, nclm3];
end
问题
上述代码存在以下问题:
1)在用户插入文件名后,Matlab不会将导入的数据保存为“数据”。因此我不知道为什么我的代码错了。
filename =input('Insert the name of the file: ', 's');
data = load(filename);
2)最后的列没有相同的尺寸,因为我可以看到Matlab独立地从列中删除了值。因此,有一种方法可以让Matlab从矩阵中删除值/行,而不是给定范围的三个“向量”。
答案 0 :(得分:0)
1)不确定你的意思。我创建了一个示例文本文件,Matlab将数据导入data
就好了。但是,您只返回原始未过滤的数据,所以这可能就是您的意思???我修改它以返回原始数据和过滤后的数据。
2)您需要将or
错误索引放在一起,以便像这样从每列中删除它们。注意我做了一些其他的编辑...请参阅下面代码中的注释:
function [origData, filteredData]= insertData(filename)
% You pass in filename then overwrite it ...
% Modified to only prompt if not passed in.
if ~exist('filename','var') || isempty(filename)
filename = input('Insert the name of the file: ', 's');
end
origData = load(filename);
% Ranges check for each column
% Note: return these if you want to know what data was filter for
% which reason
badIdx1 = origData(:,1) > 0;
badIdx2 = origData(:,2) >= 10 & origData(:,2) <= 100;
badIdx3 = origData(:,3)>0;
totalBad = badIdx1 | badIdx2 | badIdx3;
%Final new data columns within the ranges
filteredData = origData(~totalBad,:);
end
注意:您提到您想知道哪种类型的错误。该信息现在包含在badIDx1
,2,3中。因此您可以将它们返回,在屏幕上打印消息,或者显示该信息所需的任何信息。