【问题标题】:Calculating velocities and acceleration in python for large numpy arrays在 python 中为大型 numpy 数组计算速度和加速度
【发布时间】:2016-02-12 20:11:11
【问题描述】:

我正在编写一个粒子跟踪代码,其中我的数组存储如下:

x_pos   y_pos    path#   slice#
1       10       1       1
2       11       1       2
3       12       1       3
5       2        2       1
7       4        2       2
9       6        2       3
11      8        2       4
...
2       6        N       100

其中每个路径编号对应单个粒子的轨迹,切片编号为包含该粒子的图像编号。

我想计算每条路径的速度和加速度(路径的每一段,然后是整个路径)。目前,我正在使用(假设我的时间步长为 1):

vel_x = np.diff(data['x_Pos']) 
acc = np.diff(vel_x)

这很好用,但是我必须遍历数组并取出不正确的值(即路径# 更改的位置)。由于我的数组的长度接近 100 万,有谁知道这样做的快速方法?或者,计算速度和加速度的更好方法?

任何意见或建议将不胜感激,因为我对 python 比较陌生!

【问题讨论】:

    标签: python arrays numpy pandas


    【解决方案1】:

    试试np.where:

    vel_x = np.where(np.diff(data['path#'])==0, np.diff(data['x_Pos']), np.inf)
    

    结果(“inf”只是为了显示数据无效):

    array([  1.,   1.,  inf,   2.,   2.,   2.])
    

    【讨论】:

    • 我认为np.nan 会比np.inf 更好。如果您将一个数字除以一个无效值,您会期望另一个无效值,而不是 0。
    • 感谢 RootTwo 和 @Goyo。我最终做了类似的事情,但我认为你的答案要容易得多! - 对数组排序results = results.sort_values(by=['Count','Slice']) - 将索引设置为计数/切片results = results.set_index(['Count','Slice']) - 循环遍历索引for ii in results.index.get_level_values('Count').unique(): results['Vel_x'][ii].iloc[:-1]=np.diff(results['X'][ii]) results['Vel_y'][ii].iloc[:-1]=np.diff(results['Y'][ii])
    猜你喜欢
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多