我是 python 的新手,我有一个问题。 我有一些测量数据保存在一个 txt 文件中。 数据用制表符分隔,结构如下:
0 0 -11.007001 -14.222319 2.336769
每次模拟我总是有 32 个数据点 (0,1,2,...,31),我有 300 次模拟 (0,1,2...,299),所以数据首先用模拟的数量,然后是数据点的数量。
第一列是模拟编号,第二列是数据点编号,另外三列是x,y,z坐标。
我想创建一个三维数组,第一个维度应该是模拟编号,第二个是数据点的编号,第三个是三个坐标。
我已经开始了,这是我目前所拥有的:
## read file
coords = [x.split('\t') for x in
open(f,'r').read().replace('\r','')[:-1].split('\n')]
## extract the information you want
simnum = [int(x[0]) for x in coords]
npts = [int(x[1]) for x in coords]
xyz = array([map(float,x[2:]) for x in coords])
但我不知道如何组合这两个列表和这个数组。
最后我想要这样的东西:
array = [simnum][num_dat_point][xyz]
感谢您的帮助。
我希望你理解我的问题,这是我第一次在 python 论坛上发帖,所以如果我做错了什么,我很抱歉。
再次感谢
最佳答案
您可以将它们与 zip
function 结合使用,像这样:
for sim, datapoint, x, y, z in zip(simnum, npts, *xyz):
# do your thing
或者您可以完全避免列表理解,而只是遍历文件的行:
for line in open(fname):
lst = line.split('\t')
sim, datapoint = int(lst[0]), int(lst[1])
x, y, z = [float(i) for i in lst[2:]]
# do your thing
要解析一行,您可以(并且应该)执行以下操作:
coords = [x.split('\t') for x in open(fname)]
关于python - 从 txt 文件创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1256099/