如何导入具有所需结构的.txt文件

2024-06-16 09:34:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要导入一个txt文件,该文件被支持为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

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.0000000 E+000 0.0000000 E+000 0.0000000 E+000 0.0000000 E+000 0.0000000 E+000 0.0000000 E+000 0.0000000 E+000 0.0000000 E+000 0.0000000 E+000

调用feat = np.loadtxt(x) 返回一个奇怪的维度(3602014),例如,如果我分析第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的所有非0值。。。 在第2n行,我将有相同的,但原来的行1,4,7,。。。同样,结构是相同的,从1.0+值开始=第1行的0+2.0+个值!=第四行

如前所述,我想得到一个维度(X,18)的数组,没有出现的1.0和2.0,其中X只是原始文件应该具有的行数(每18列一个新行)

文件可以在https://github.com/OpenSLAM-org/openslam_ufastslam/blob/master/code/victoria_park/landmark.txt中下载


Tags: 文件数据httpsorggithubtxtcom元素
2条回答

文本文件只有4行数千列。我认为如果我们读入整个文件并去掉换行符,我们就可以创建一个值列表

然后我们可以把它做成一个numpy数组,然后重新处理它

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))

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的倍数)

相关问题 更多 >