无法弄清楚numpy loadtxt命令中数据类型的错误

时间:2012-02-12 20:22:02

标签: python numpy format

我正在尝试使用loadtxt读取Ascii文件。该文件看起来像这样

UT, L, R, LocT, MLT, MLAT
      240000      1.03033      1.06433      2.73627      2.93244      8.51725
      300000      1.01964      1.05914      3.07449      3.24764      6.54548
      360000      1.01194      1.05747      3.41200      3.56224      4.51283
      420000      1.00746      1.05935      3.74672      3.87489      2.44624
      480000      1.00702      1.06476      4.07669      4.18431     0.373423

但是,任何行中至少可以包含9个字符。

我一直在使用此代码

posdata = np.loadtxt(denfile, dtype={'names':('UT', 'L', 'R', 'loct', 'MLT', 'Mlat'), 'formats':('I9', 'f9', 'f9', 'f9', 'f9', 'f9')} , skiprows = 1)

我收到一条错误,内容为TypeError: data type not understood。当我使用小写字母时,我得到了同样的错误。但是在上面的行中,如果i是小写的话,我在不同的文件中读取它不起作用,但是如果它是大写的话,它会起作用。

我不确定错误发生在哪里或如何解决。任何想法将不胜感激。

1 个答案:

答案 0 :(得分:4)

在numpy中没有72位浮点数。

指定'f8' / 'I8'或更容易阅读:np.float / np.uint。没有'f9'(这将是一个72位的浮动)。

查看defining a dtype in numpy的文档。

对于你的情况,你可能不需要为此烦恼。

如果你真的不需要作为结构化数组的东西,那么不要使用它。 (如果您不知道结构化数组是什么,在这种情况下您可能不需要它。)

data = np.loadtxt("datafile.txt", skiprows=1)。如果确实需要结构化数组,请考虑执行data = np.genfromtxt("datafile.txt", names=True)。对于简单的情况,稍后将第一列转换为无符号整数更容易,而不是显式定义dtype。