У меня есть текстовый файл, который, среди других данных, содержит данные о видеDTYPE для целых три поплавки
215
1 0.0 0.0 0.0
[...]
9 -0.4330127018930699 0.2499999999985268 1.0
10 -0.1366025403783193 -0.03660254037890862 1.0
11 -0.2499999999985268 -0.4330127018930699 1.0
12 0.03660254037890862 -0.1366025403783193 1.0
13 0.4330127018930699 -0.2499999999985268 1.0
14 0.1366025403783193 0.03660254037890862 1.0
15 0.2499999999985268 0.4330127018930699 1.0
[...]
215 1.0 1.0 1.0
[...] # some more data, other format
т.е.
- целое число, определяющее количество строк данных в come,
- N строк с целым числом, за которыми следуют три поплавка,
- некоторые данные, отформатированные по-разному.
Я хотел бы преобразовать эти данные в массив numpy. Поскольку я могу лучше всего получить доступ к файлу с генератором по линиям, вам может понадобиться numpy.fromiter()
. Однако я не могу правильно указать тип данных. Это
with open(filename) as f:
line = islice(f, 1).next()
num_nodes = int(line)
points = numpy.fromiter(
islice(f, num_nodes),
dtype=[('idx', int, 1), ('vals', float, 3)],
count=num_nodes
)
делает не работу. Любые намеки?
Я предлагаю 'loadtxt' или' genfromtxt'. С 'dtype = None' они выберут int v float для вас. Или попробуйте 'i, f, f, f' dtype. Ваш dtype также может работать. – hpaulj
Мне сложно работать с методами, требующими дескриптора файла, так как файл содержит много других данных, которые по-разному отформатированы. Вот почему я использую генератор ('islice'). –
'genfromtxt' берет все, что может кормить его по одной линии за раз. Для тестирования я часто использую список строк. Генератор должен работать нормально. – hpaulj