Как импортировать файл .txt с желаемой структурой - PullRequest
0 голосов
/ 03 января 2019

Мне нужно импортировать текстовый файл, который должен быть X строк с 18 столбцами в каждой, но на самом деле это так (даже если не видно каждые 13 столбцов, начинается новая строка всего из 5 элементов):

2.0462020e + 001 2.9598587e + 001 2.8684617e + 001 1.2745371e + 001 2.3967345e + 001 2.4593504e + 001 1.2683864e + 001 3.1394543e + 000 0,0000000e + 000 0,0000000e + 000 0,0000000e + 000 0,0000000e + 000 0,0000000e + 000 0,0000000e + 000 0,0000000e + 000 0,0000000e + 000 0,0000000e + 000 0,0000000e + 000

8.8575460e-001 1.0210176e + 000 1.2740904e + 000 1.3526302e + 000 1.4878932e + 000 1.8107791e + 000 1.9067722e + 000 2.8143434e + 000 0,0000000e + 000 0,0000000e + 000 0,0000000e + 000 0,0000000e + 000 0,0000000e + 000 0,0000000e + 000 0,0000000e + 000 0,0000000e + 000 0,0000000e + 000 0,0000000e + 000

Звонок feat = np.loadtxt(x) возвращает странное измерение (3, 602014), и если я анализирую строку 0, например, она начинается следующим образом: 1,0 20,46 29,58 28,68 12,74 23,96 24,59 12 683,12 2,0 20,46 29,58 ... Это как для первой строки в результате я получаю все ненулевые значения для столбцов реального набора данных 0,3,6,9,12 ... Во 2-й строке у меня будет то же самое, но для исходных строк 1,4,7, ... и снова структура такая же, начинается с 1,0 + значений! = 0 1-й строки + 2,0 + значений! = 4-й строки.

Как я уже сказал, я хотел бы получить массив измерений (X, 18) без отображаемых 1.0 и 2.0, а где X - это просто количество строк, которое предполагалось иметь в исходном файле (каждые 18 столбцов в новый ряд)

Файл можно скачать в https://github.com/OpenSLAM-org/openslam_ufastslam/blob/master/code/victoria_park/landmark.txt

Ответы [ 2 ]

0 голосов
/ 03 января 2019

С genfromtxt (или loadtxt) я получаю:

In [64]: data = np.genfromtxt('../Downloads/landmark.txt')
In [65]: data.shape
Out[65]: (3, 60204)
In [66]: data.dtype
Out[66]: dtype('float64')
In [67]: data[0,:10]
Out[67]: 
array([ 1.       , 20.46202  , 29.598587 , 28.684617 , 12.745371 ,
       23.967345 , 24.593504 , 12.683864 ,  3.1394543,  2.       ])
In [68]: data[1,:10]
Out[68]: 
array([1.       , 0.8857546, 1.0210176, 1.2740904, 1.3526302, 1.4878932,
       1.8107791, 1.9067722, 2.8143434, 2.       ])

Это соответствует тому, что я вижу, когда смотрю на файл в моем текстовом редакторе - 3 строки с большим количеством столбцов.

data.reshape(-1,18) создает массив с (10034, 18).Мы могли бы отбросить начальную 1.000, но это могло бы испортить форму (не больше кратной 18).

0 голосов
/ 03 января 2019

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

Тогда мы можем создать этот массив и снова изменить его.

import numpy as np
with open('landmark.txt', 'r') as myfile:
    data=myfile.read().replace('\n', '').split()

my_data = np.array(data).reshape((int(len(data)/18), 18))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...