使用numpy向量化从离散的尖峰或峰中获取一系列步长

时间:2018-09-30 20:27:24

标签: python numpy

我有一个像这样的尖峰或峰的Numpy数组:

peaks = [0, 0, 3, 0, 6, 0, 0, 9, 0, 0, 0, 0, 15, 0]

我想保持峰,以获取以下步骤:

steps = [0, 0, 3, 3, 6, 6, 6, 9, 9, 9, 9, 9, 15, 15]

我担心速度(这是对大型数组(1000 ** 3)的图像分析),因此我不能使用for循环或列表推导。确实必须对其进行矢量化处理。在for循环中,这显然是微不足道的,但是矢量化使我感到烦恼! (几乎是双关语)

此外,由于它将应用于2D和3D阵列/图像,因此仅适用于1D列表的解决方案是不够的。它只能在 1个轴上运行,但必须能够跨其他轴工作。我的意思是:

peaks = [[0, 0, 3, 0, 0, 6, 0, 0]
         [0, 4, 0, 0, 8, 0, 0, 0]
         [3, 0, 0, 0, 6, 0, 9, 0]]

应成为:

steps = [[0, 0, 3, 3, 3, 6, 6, 6]
         [0, 4, 4, 4, 8, 8, 8, 8]
         [3, 3, 3, 3, 6, 6, 9, 9]]

我觉得必须有一些numpy函数来执行此操作,但似乎找不到它。我希望有一个名为hold_peaks的函数或类似的函数。

我一直在考虑cumsum,它确实可以创建步骤,并且可以执行第一步,但是会使后续步骤变得过高。我也曾考虑过add.at,但找不到创建索引的方法。

注释

在我计划的用例中,我希望峰值高度一直在增加,因此对我来说,可以做到这一点的解决方案:

peaks = [0, 4, 0, 0, 2, 0, 7, 0]
steps = [0, 4, 4, 4, 4, 4, 7, 7]

但是我想最好这样做:

peaks = [0, 4, 0, 0, 2, 0, 7, 0]
steps = [0, 4, 4, 4, 2, 2, 7, 7]
保持最近的峰值,即使该峰值低于前一个峰值。

0 个答案:

没有答案