Не могу понять, что не так с типом данных в команде numpy loadtxt - PullRequest
1 голос
/ 13 февраля 2012

Я пытаюсь прочитать в файле Ascii, используя loadtxt. Файл выглядит так

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. Когда я использую строчные буквы, я получаю ту же ошибку. Однако в строке выше, где я читаю в другом файле, если я в нижнем регистре, это не работает, но если это в верхнем регистре, это работает.

Я не уверен, где происходит ошибка или как ее исправить. Любые идеи очень приветствуются.

1 Ответ

4 голосов
/ 13 февраля 2012

В numpy не существует 72-разрядного числа с плавающей запятой.

Либо укажите 'f8' / 'I8', либо для удобства чтения: np.float / np.uint.'f9' (это будет 72-битное число с плавающей точкой).

Посмотрите документацию для определения dtype в numpy .

Для вашего случаяВам, вероятно, не нужно беспокоиться об этом.

Если вам не нужны вещи как структурированный массив, не используйте его.(Если вы не знаете, что такое структурированный массив, вам, вероятно, в этом случае он не нужен.)

Просто выполните data = np.loadtxt("datafile.txt", skiprows=1).Если вам нужен структурированный массив, подумайте о том, чтобы сделать data = np.genfromtxt("datafile.txt", names=True).В простых случаях проще преобразовать первый столбец как целое число без знака, а не явно определять dtype.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...