我有一个行文件,这反过来又保存了每行的信息,速度,时间和表面类型。我想要做的是按照下面显示的顺序在np.array中对此信息进行排序,其中id是行的编号。
(id) 0 1 2 3 4 5 6 7 8 9
0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10
1 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10
2 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10
3 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10
4 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10
5 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10
... 谢谢你的回复
答案 0 :(得分:2)
您可能会发现numpy.loadtxt有用。
例如,假设您有一个包含以下内容的文件:
数据文件:
(id) 0 1
0 1 smooth
1 11 choppy
2 20 turbulent
3 2 smooth
4 5 choppy
5 7 bumpy
然后,您可以使用
将数据加载到numpy结构化数组中import numpy as np
arr=np.loadtxt('datafile',
dtype=[('id','int'),('speed','float'),('surface','|S20')],
skiprows=1)
请注意,您可以通过指定skiprows=1
来跳过数据文件的第一行。
然后您可以像往常一样使用数字索引访问行,例如arr[1]
,
您可以按名称访问列,例如arr['speed']
。
您可以使用arr[3]['speed']
或arr['speed'][3]
获得第3行的速度。
有关结构化数组的更多信息,请参阅 http://docs.scipy.org/doc/numpy/user/basics.rec.html
答案 1 :(得分:0)
也许这会让你开始......
data ='''
(id) 0 1 2 3 4 5 6 7 8 9
0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10
1 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10
2 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10
3 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10
4 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10
5 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10'''
for line in data.strip().split('\n'):
line = line.strip()
if line:
print '*'.join(line.split())
输出:
(id)*0*1*2*3*4*5*6*7*8*9
0*t1*t2*t3*t4*t5*t6*t7*t8*t9*t10
1*t1*t2*t3*t4*t5*t6*t7*t8*t9*t10
2*t1*t2*t3*t4*t5*t6*t7*t8*t9*t10
3*t1*t2*t3*t4*t5*t6*t7*t8*t9*t10
4*t1*t2*t3*t4*t5*t6*t7*t8*t9*t10
5*t1*t2*t3*t4*t5*t6*t7*t8*t9*t10