我怎么能把NaN值从一个矩阵?

4.906视图(30天)
迄今为止我的代码如下。我有代码,以便它跳过前19行,开始在20行。然而,我需要删除的NaN值等数据列=(10,0.04500,0;南南)为例。行我不得不删除NaN的运行时,它只是不删除它们。我不知道不工作。如何解决我的问题?
谢谢
fid = fopen (“filename.txt”);
行= textscan (fid,' % s ',“分隔符”,' \ n ');
文件关闭(fid);
列= cellfun (@ (x) textscan (x,' % f ',“分隔符”,' \ t ',“CollectOutput”,1)
、行{1}(20:最终,:));
fid检测器isnan (fid (: 1)):) = [];

接受的答案

Stephen23
Stephen23 2015年2月18日
编辑:Stephen23 2020年8月15日
的代码有多个问题需要解决。这几件事情改善:
  • 打开外部文件文档指出,支撑材是一个整数文件标识符……。的变量支撑材包含文件数据,它只是一个参考一个打开的文件。也是一个标量值。所以你的索引支撑材就好像它是一个数据数组没有任何意义。
  • 过于复杂的方法阅读的文本文件:第一textscan,然后再次调用textscan cellfun,都只是为了避免一些头行吗?相反,你应该阅读textscan的文档,并使用HeaderLines选项,如下:
fid = fopen (“filename.txt”,“r”);
data = textscan (fid检测器,' % f ',“分隔符”,' \ t ',“HeaderLines”,20);
fclose (fid)
我也删除了 CollectOutput 选择,因为这是多余的,如果只有一个格式说明符。出于同样的原因,分隔符也没有意义。如果你有多个值每一行,那么你需要指定的 formatSpec :在文档的例子有很多。
从R2018b开始,您可以使用“rmmissing”功能,将“NaN”值从一个数组。例如,考虑以下几点:
一个=[1南2];
B = rmmissing (A)
结果是向量B = [1 - 2]。
在R2018a和早些时候,使用“isnan”功能:
一个=[1南2];
B = (~ isnan ())
5个评论
沃尔特·罗伯森
沃尔特·罗伯森 2019年10月31日
X =列{2};
X (isnan (X) = [];

登录置评。

更多的答案(3)

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

从董Ngoc明
从董Ngoc明 2020年6月16日
你可以试试这种方法
idx = isnan(列)
列(idx:) = []

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

登录置评。

类别

找到更多的在数值类型帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的