Как определить структурированный тип данных для numpy loadtxt? - PullRequest
0 голосов
/ 24 сентября 2019

Я хочу прочитать файл данных, каждый столбец которого разделен символом табуляции, а каждая строка выглядит следующим образом:

[475.407, 792.916]  [893.258, 614.066]  [461.864, 356.715]  [758.244, 274.128]

В настоящее время я использую numpy.loadtxt, чтобы прочитать этот файл как строкуи все работает нормально:

data = np.loadtxt (filename, dtype=np.str, delimiter="\t")

Однако мне нужны числа с плавающей запятой, а не строки.Мой ожидаемый результат:

(np.float32, np.float32) (np.float32, np.float32) (np.float32, np.float32) (np.float32, np.float32)

Поэтому я решил определить новый тип данных как np.dtype ("f4, f4"), чтобы каждый элемент рассматривался как два числа с плавающей запятой:

data = np.loadtxt (filename, dtype=np.dtype("f4, f4"), delimiter="\t")

, что приводит к следующей ошибке:

ValueError: could not convert string to float: '[475.407, 792.916]'

Вопрос

  • Как определить новый тип данных для numpy.loadtxt?
  • Есть ли другая альтернатива с другими инструментами?

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Одной из альтернатив является использование np.fromregex :

import numpy as np

arr = np.fromregex('test.txt', '(\d+.\d+),\s+(\d+.\d+)', dtype=[('u', np.float32), ('v', np.float32)])

print(arr)

Вывод

[(475.407, 792.916) (893.258, 614.066) (461.864, 356.715)
 (758.244, 274.128)]

Хотя я советую вам следовать @juanpa.arrivillaga посоветуйте и исправьте это у источника.

0 голосов
/ 24 сентября 2019

Каждый элемент сохраняется в x:

data = np.loadtxt (filename, dtype=np.str, delimiter="\t")

for txt in data:
    x_list = [float(a) for a in txt[1:-1].split(",")]
    x = np.array(x_list)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...