Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于txt文件坐标的粒子跟踪_Python_Numpy_Matplotlib - Fatal编程技术网

Python 基于txt文件坐标的粒子跟踪

Python 基于txt文件坐标的粒子跟踪,python,numpy,matplotlib,Python,Numpy,Matplotlib,我有一些来自OpenFoam模拟的粒子轨迹数据。 数据如下所示: 0.005 0.00223546 1.52096e-09 0.00503396 0.01 0.00220894 3.92829e-09 0.0101636 0.015 0.00218103 5.37107e-09 0.0154245 ..... 第一行是时间,然后是x,y,z坐标。 在我的文件夹中,每个跟踪的粒子都有一个文件 我想计算每个时间步中每个粒子的速度和位移 最好以类似粒子[1].time[0.01]的方式输入位置数据

我有一些来自OpenFoam模拟的粒子轨迹数据。 数据如下所示:

0.005 0.00223546 1.52096e-09 0.00503396
0.01 0.00220894 3.92829e-09 0.0101636
0.015 0.00218103 5.37107e-09 0.0154245
.....
第一行是时间,然后是x,y,z坐标。 在我的文件夹中,每个跟踪的粒子都有一个文件

我想计算每个时间步中每个粒子的速度和位移

最好以类似粒子[1].time[0.01]的方式输入位置数据

已经有一个python工具来解决这种问题了吗?
非常感谢

单个文件可以很容易地加载以下内容:

import numpy as np
t, x, y, z = np.loadtxt(filename, delimiter=' ', unpack=True)
现在有一个问题,您希望随着时间索引粒子位置,而Numpy只接受整数作为索引


编辑:在Python中,您可以将“position”设置为字典,以便可以使用浮点或其他任何内容对其进行索引。但现在这取决于你拥有的数据量,以及你想用它做什么。因为对于任何比在时间t选择位置更“高级”的内容,字典的效率都低于Numpy数组。

如果有规则的时间步长,可以使用pandas数据帧来查找差异

import pandas as pd

dt = .005 #or whatever time difference you have

df = pd.read_csv(<a bunch of stuff indicating how to read the file>)
df['v_x'] = df.diff(<the x colum>)
df['v_x'] = df['v_x']/dt
将熊猫作为pd导入
dt=0.005#或任何时差
df=pd.read_csv()
df['v_x']=df.diff()
df['v_x']=df['v_x']/dt
你“几乎”不需要numpy。我用一些初始方法创建了一个简单的类层次结构。如果你喜欢这种方法,你可以从中改进。请注意,我是从一个字符串创建的,您应该对文件中的行使用
而不是
string.split
方式

import numpy

class Track(object):
    def __init__(self):
        self.trackpoints = []

    def AddTrackpoint(self, line):
        tpt = self.Trackpoint(line)
        if self.trackpoints and tpt.t < self.trackpoints[-1].t:
            raise ValueError("timestamps should be in ascending order")
        self.trackpoints.append(tpt)
        return tpt

    def length(self):
        pairs = zip(self.trackpoints[:-1], self.trackpoints[1:])
        dists = map(self.distance, pairs)
        result = sum(dists)
        print result

    def distance(self, points):
        p1, p2 = points
        return numpy.sqrt(sum((p2.pos - p1.pos)**2)) # only convenient use of numpy so far

    class Trackpoint(object):
        def __init__(self, line):
            t, x, y, z = line.split(' ')
            self.t = t
            self.pos = numpy.array((x,y,z), dtype=float)


entries = """
0.005 0.00223546 1.52096e-09 0.00503396
0.01 0.00220894 3.92829e-09 0.0101636
0.015 0.00218103 5.37107e-09 0.0154245
""".strip()


lines = entries.split("\n")

track = Track()

for line in lines:
    track.AddTrackpoint(line)

print track.length()
导入numpy
类轨迹(对象):
定义初始化(自):
self.trackpoints=[]
def AddTrackpoint(自身、线路):
tpt=自跟踪点(线路)
如果self.trackpoints和tpt.t
能否提供更大的数据集?也许在一个星期内?(你知道,你无论如何都应该有一个GitHub帐户…;o)GitHub完成了。。。谢谢你的建议!