如何从矩阵中删除NaN值?

4267次(最近30天)
布兰登·沃克
布兰登·沃克 2015年2月18日
编辑: 斯蒂芬。 2020年8月15日
到目前为止我的代码如下。我的代码,使得它跳过在管线20的第一线19和开始然而,我需要删除NaN值是在我的数据等列= [10; 0.04500; 0;为NaN; NaN的]例如。该生产线我不得不删除NaN的运行,它只是没有将其删除。我不知道什么是不工作的。如何解决我的问题?
谢谢
FID =的fopen('FILENAME.TXT');
行= textscan(FID,'%s' 的“分隔符”'\ n');
FCLOSE(FID);
列= cellfun(@(X)textscan(X,'%F'“分隔符”' \ t '“CollectOutput”, 1)...
中,行{1,1}(20:端,:));
fid (isnan (fid检测器:1 )),:) = [];

接受的答案

斯蒂芬。
斯蒂芬。 2015年2月18日
编辑:斯蒂芬。 2020年8月15日
该代码有需要修复的多个问题。这里,一对夫妇的事情,以改善:
  • 打开外部文件文档指出支撑材是一个整数文件标识符….的变量支撑材包含对于文件数据,它仅仅是一个参考一个打开的文件。而且它也是一个标量值。因此你试图索引支撑材如果它是一个数据数组,那就没有任何意义了。
  • 过于复杂的读取文本文件的方法:首先textscan,然后cellfun再次调用textscan,所有只是为了避免一些标题行?相反,你应该阅读textscan的文档,并使用HeaderLines选项,如下所示:
FID =的fopen('FILENAME.TXT'“r”);
数据= 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)

埃里克·S.
埃里克·S. 2015年2月18日
编辑:每只伊拉克森 2018年5月25日
你可以像这样做
印第安纳州= ~ isnan(列);
列=列(印第安纳州);

琮东玉胡志明市
琮东玉胡志明市 2020年6月16日
你可以试试这个方法
idx = isnan(列)
列(idx:) = []

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

登录评论。

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!