如何从矩阵中删除NaN值?

4346视图(过去30天)
布兰登·沃克
布兰登·沃克 2015年2月18日
编辑: 史蒂芬 2020年8月15日
到目前为止,我的代码如下。我的代码跳过了前19行,从第20行开始。但是,我需要删除数据中的NaN值,例如Columns = [10;0.04500;0;NaN;NaN]。我要移除NaN的伤口,但这并不是要移除他们。我不确定是什么在起作用。我该如何解决我的问题?
谢谢
fid = fopen (“filename.txt”);
行= textscan (fid,' % s ',“分隔符”,' \ n ');
文件关闭(fid);
列= cellfun (@ (x) textscan (x,' % f ',“分隔符”,“\t”,“收集输出”,1)...
、行{1}(20:最终,:));
fid(isnan(fid(:,1)),:)=[];

公认的答案

史蒂芬
史蒂芬 2015年2月18日
编辑:史蒂芬 2020年8月15日
该代码有多个问题需要修复。这里有一些需要改进的地方:
  • 这个福彭文档指出,氢火焰离子化检测器是一个整数文件标识符。。。. 变量氢火焰离子化检测器包含文件数据,它只是一个参考到打开的文件。它也是一个标量值。因此你试图索引到氢火焰离子化检测器就好像它是一个数据数组一样没有任何意义。
  • 阅读文本文件的方法过于复杂:首先是textscan,然后cellfun再次调用textscan,所有这些都只是为了避免一些标题行?相反,你应该阅读文本扫描的文档,并使用车头线选项,如下:
fid = fopen (“filename.txt”,“r”);
data = textscan (fid检测器,' % f ',“分隔符”,“\t”,“头线”,20);
fclose (fid)
我还删除了 收集输出 选项,因为如果只有一个格式说明符,这是多余的。出于同样的原因,分隔符也没有真正意义。如果每行有多个值,则需要在 格式规范 :文档中有大量示例。
从R2018b开始,可以使用“rmmissing”函数从数组中删除“NaN”值。例如,考虑以下内容:
A=[1,NaN,2];
B=RMM缺失(A)
结果是向量“B=[12]”。
在R2018a和更早的版本中,使用“isnan”函数:
A=[1,NaN,2];
B=A(~isnan(A))
5评论
沃尔特·罗伯森
沃尔特·罗伯森 2019年10月31日
X =列{2};
X(isnan(X))=[];

登录以发表评论。

更多的答案(3)

埃里克。
埃里克。 2015年2月18日
编辑:每•艾萨克森 2018年5月25日
你可以这样做
ind=~isnan(列);
列=列(ind);

Cong Dong Ngoc Minh
Cong Dong Ngoc Minh 2020年6月16日
你可以试试这个方法
idx=isnan(列)
列(idx,:)=[]

berfin karabulut
berfin karabulut 2020年8月14日
或者你可以简单地使用“omitnan”功能?
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2020年8月15日
omitnan不是Mathworks函数。这是一个选项,可用于与所问问题无关的某些功能。

登录以发表评论。

社区寻宝

在MATLAB Central中查找宝藏,了解社区如何帮助您!

开始狩猎!