【问题标题】:How to skip NaN points when loading ASCII file?加载 ASCII 文件时如何跳过 NaN 点?
【发布时间】:2013-07-23 13:08:28
【问题描述】:

我正在尝试加载一个 ASCII 文件,其中包含在某些行的第二列中未定义的点,我这样做并收到此错误:

S = load('bond_order_correlation4A.dat')
??? Error using ==> load
Unknown text on line number 7 of ASCII file
C:\Users\VAIO\Desktop\MATLAB\R2010b\bin\bond_order_correlation4A.dat
"-nan+-nani".

我怎样才能避免这个错误,否则我怎样才能跳过阅读有 NaN 的行?

有什么想法吗?

这是数据的行:

1.751500e+01    0.900636+0.000000i
1.854500e+01    0.910675+0.000000i
1.957500e+01    0.901020+0.000000i
2.060500e+01    0.866812+0.000000i
2.163500e+01    0.826753+0.000000i
2.266500e+01    0.736222+0.000000i
2.369500e+01    -nan+-nani
2.472500e+01    -nan+-nani
2.575500e+01    -nan+-nani
2.678500e+01    -nan+-nani
2.781500e+01    -nan+-nani
2.884500e+01    0.804500+0.000000i
2.987500e+01    0.863660+0.000000i
3.090500e+01    0.899600+0.000000i
3.193500e+01    0.912361+0.000000i
3.296500e+01    0.906553+0.000000i
3.399500e+01    0.883229+0.000000i
3.502500e+01    0.873248+0.000000i
3.605500e+01    0.903132+0.000000i
3.708500e+01    0.909807+0.000000i
3.811500e+01    0.904406+0.000000i
3.914500e+01    0.886968+0.000000i
4.017500e+01    0.860080+0.000000i
4.120500e+01    0.810715+0.000000i
4.223500e+01    -nan+-nani
4.326500e+01    -nan+-nani
4.429500e+01    -nan+-nani
4.532500e+01    0.812973+0.000000i
4.635500e+01    0.863783+0.000000i
4.738500e+01    0.895398+0.000000i
4.841500e+01    0.908204+0.000000i
4.944500e+01    0.908985+0.000000i
5.047500e+01    0.900171+0.000000i
5.150500e+01    0.882722+0.000000i
5.253500e+01    0.851140+0.000000i
5.356500e+01    0.890132+0.000000i
5.459500e+01    0.904564+0.000000i
5.562500e+01    0.908607+0.000000i
5.665500e+01    0.904241+0.000000i
5.768500e+01    0.891706+0.000000i
5.871500e+01    0.875118+0.000000i
5.974500e+01    0.844325+0.000000i
6.077500e+01    0.848961+0.000000i
6.180500e+01    0.883005+0.000000i
6.283500e+01    0.900617+0.000000i
6.386500e+01    0.907607+0.000000i
6.489500e+01    0.903102+0.000000i
6.592500e+01    0.903907+0.000000i
6.695500e+01    0.905971+0.000000i
6.798500e+01    0.901497+0.000000i
6.901500e+01    0.891710+0.000000i
7.004500e+01    0.873431+0.000000i
7.107500e+01    0.857750+0.000000i
7.210500e+01    0.892680+0.000000i
7.313500e+01    0.905379+0.000000i
7.416500e+01    0.907424+0.000000i
7.519500e+01    0.904534+0.000000i
7.622500e+01    0.891604+0.000000i
7.725500e+01    0.874679+0.000000i
7.828500e+01    0.880488+0.000000i
7.931500e+01    0.899794+0.000000i
8.034500e+01    0.908564+0.000000i
8.137500e+01    0.906300+0.000000i
8.240500e+01    0.898721+0.000000i
8.343500e+01    0.895449+0.000000i
8.446500e+01    0.900390+0.000000i
8.549500e+01    0.901614+0.000000i
8.652500e+01    0.896143+0.000000i
8.755500e+01    0.884075+0.000000i
8.858500e+01    0.860837+0.000000i
8.961500e+01    0.845785+0.000000i
9.064500e+01    0.883891+0.000000i
9.167500e+01    0.902221+0.000000i
9.270500e+01    0.905519+0.000000i
9.373500e+01    0.901589+0.000000i
9.476500e+01    0.892879+0.000000i
9.579500e+01    0.896607+0.000000i
9.682500e+01    0.900943+0.000000i
9.785500e+01    0.904287+0.000000i
9.888500e+01    0.901320+0.000000i
9.991500e+01    0.892640+0.000000i
1.009450e+02    0.884730+0.000000i
1.019750e+02    0.888384+0.000000i
1.030050e+02    0.895942+0.000000i
1.040350e+02    0.894981+0.000000i
1.050650e+02    0.887988+0.000000i
1.060950e+02    0.874380+0.000000i
1.071250e+02    0.853539+0.000000i
1.081550e+02    0.839207+0.000000i
1.091850e+02    0.867059+0.000000i
1.102150e+02    0.890265+0.000000i
1.112450e+02    0.899481+0.000000i
1.122750e+02    0.903685+0.000000i
1.133050e+02    0.899493+0.000000i
1.143350e+02    0.895112+0.000000i
1.153650e+02    0.896775+0.000000i
1.163950e+02    0.893841+0.000000i
1.174250e+02    0.885450+0.000000i
1.184550e+02    0.874641+0.000000i
1.194850e+02    0.871421+0.000000i

enter code here

【问题讨论】:

  • 我认为你在这种情况下的错误是“nani”而不是“nan”......
  • 您能否发布一个显示此错误的简短示例文件(作为文本)?我建议尝试pandas函数read_csv,它非常灵活,更不用说DataFrame功能了。
  • 不,我认为这与 nani 无关,我在这里表示文件中打印的复数的虚部...我已经尝试过其他具有 0.987+00i 的数据,并且仅加载了这个包含 nan 的文件给了我这样的错误,这里是 txt 文件的第一行:1.751500e+01 0.900636+0.000000i 1.854500e+01 0.910675+0.000000i 2.163500e+01 0.826753+0.000000i 2.2666520+0.00.70+3+0我 2.369500e+01 -nan+-nani 2.472500e+01 -nan+-nani
  • 请通过编辑您的问题在代码段中添加带有适当换行符的数据。这样,我们就有了工作要做。
  • 您的加载命令是否将0.810715+0.000000i 解释为数字?如果我在我的系统上运行加载,所有内容都会作为文本 (string) 导入。完全没有数字,但也没有错误。

标签: matlab


【解决方案1】:

您可以首先将数据文件中的“-nan+-nani”替换为“NaN”,以便 MATLAB 可以正确读取它,然后如 @juampa 所说,在 MATLAB 中过滤掉您想要的“NaN”值。

为了快速轻松地执行替换,我强烈推荐 vim。只需在 vim 中打开数据文件并输入:

:%s/-nan+-nani/NaN/g

这将进行全局替换,将文件中的“-nan+-nani”替换为“NaN”,而不要求确认每个。如果要确认,请将上面的行更改为:

:%s/-nan+-nani/NaN/gc

MATLAB 应该能够读取文件并将“NaN”值作为NaN 处理。

【讨论】:

    【解决方案2】:

    对于 MatLab,将这些字符串替换为 nan 或 NaN(不区分大小写),它会将它们正确导入为 NaN。稍后您可以在 MatLab 运行时轻松过滤它们

     M(find(M) == NaN,:) = []
    

    【讨论】:

    • 我刚刚用 NaN 替换了 nan 的东西,它起作用了,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 2010-12-28
    • 2021-10-02
    • 1970-01-01
    相关资源
    最近更新 更多