沿轴平滑阵列

时间:2014-04-09 13:48:30

标签: python arrays numpy signal-processing

我研究了一个信号的平滑,并找到了Cookbook页面http://wiki.scipy.org/Cookbook/SignalSmooth,该页面适用于只有一个维度的数组。现在我真的需要一个功能,它在N轴上的(TxNx3)数组上做同样的事情。

上下文是,我有一个N粒子和T帧的轨迹,每个粒子都有x,y,z,现在我想对它们的运动及时实施某种低通滤波器,以减少电影。

所以说明这个问题:

import numpy as np
from MY_Cookbook_copy import smooth
T = np.random.random((30,30,3)) # this is the trajectory
imshow( T[:,:,0], interpolation='nearest' ) 

original trajectory

# this works but is too slow and only for the x data
for i in range( T.shape[1] ):
    T[:,i,0] = smooth( T[:,i,0], 5 )
imshow( T[:,:,1], interpolation='nearest' )

这给了 smoothed trajectory

因此我的问题的维度大约是5000个时间帧上的1000个粒子

1 个答案:

答案 0 :(得分:2)

您可以尝试使用多维高斯滤镜 - http://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.filters.gaussian_filter.html

应用高斯滤波器可以平滑信号,您可以通过将sigma设置为元组来将其应用于多个维度,这样您就可以在每个轴上进行不同的平滑处理。我想你只想随着时间的推移平滑x,y,z值,所以你可以尝试使用(2,0,0)的sigma,尽管我对你的数据设置并不完全清楚。 sigma控制高斯滤波器的宽度,因此如果你想在本地平滑,那么使用一个小的sigma。您可能需要进行一些实验才能找到所需的平滑程度。