我需要导入一个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 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的所有非0值...
在第2n行中,我将具有相同的内容,但对于原始行1,4,7,...,同样,结构是相同的,从第1行的1.0 + values!= 0开头+ 2.0 + values!=第4行。
正如我所说,我想获得一个尺寸为(X,18)的数组,而不会出现1.0和2.0,其中X只是原始文件应该具有的行数(每18列新行)
可以在https://github.com/OpenSLAM-org/openslam_ufastslam/blob/master/code/victoria_park/landmark.txt
中下载文件答案 0 :(得分:1)
您的文本文件只有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))
答案 1 :(得分:0)
有了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的倍数)。