使用numpy增加step函数的分辨率

时间:2017-06-19 21:00:31

标签: python arrays numpy interpolation

我有一个包含delta函数(0或1)的数组。我使用此函数通过应用前向填充算法生成步进函数数组。这个数组是某个操作所需的数组。

此图显示增量和步骤数组:

here

但是,我需要增加此数组的分辨率来执行操作。但是,我不能直接应用像numpy.interp

这样的东西

enter image description here

扭曲了原有的功能。

因此,我的问题是在步进函数中增加分辨率的有效(和pythonic方式)是什么?

这是一个示例脚本:

import matplotlib.pyplot as plt
import numpy as np

def forward_filling(arr):
    idx=np.where(arr==0,0,np.arange(len(arr)))    
    idx=np.maximum.accumulate(idx)    
    return arr[idx]

fig, axis = plt.subplots(1, 1)  

x_array = np.arange(0, 15)
y_delta = np.zeros(len(x_array))
y_delta[3], y_delta[7], y_delta[13] = 1, 2, 3
step_function = forward_filling(y_delta)

axis.plot(x_array, y_delta, label='delta function', marker='o')
axis.plot(x_array, step_function, label='step function')

x_high_resolution = np.linspace(0, 15, 30)

delta_interpolated  = np.interp(x_high_resolution, x_array, y_delta)
step_interpolated   = np.interp(x_high_resolution, x_array, step_function)

axis.plot(x_high_resolution, delta_interpolated, label='delta function high resolution', marker='o')
axis.plot(x_high_resolution, step_interpolated, label='step function high resolution')

axis.legend()

axis.set_xlabel('x')
axis.set_ylabel('y')

plt.show()

1 个答案:

答案 0 :(得分:0)

正如我想你想在每个给定y值的邻域中保持y值,你可以使用List Perrehension“替换”每个y值,例如3个相同的值:

step_function_hi_res = np.array([np.repeat(step,3) for step in step_function]).flatten()

然后按照您的方式对x值进行更改:

x_high_resolution = np.linspace(0, len(step_function),len(step_function)*3)