【问题标题】:Smoothing an array along an axis沿轴平滑数组
【发布时间】:2014-04-09 13:48:29
【问题描述】:

我研究了信号的平滑,发现 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' ) 

# 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' )

这给了

所以我的问题的维度大约是 1000 个粒子超过 5000 个时间框架

【问题讨论】:

  • 您能否发布一张图片或一些示例数据,以便我们了解我们正在处理的内容?

标签: python arrays numpy signal-processing


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 2021-09-11
    相关资源
    最近更新 更多