我有一个包含delta函数(0或1)的数组。我使用此函数通过应用前向填充算法生成步进函数数组。这个数组是某个操作所需的数组。
此图显示增量和步骤数组:
但是,我需要增加此数组的分辨率来执行操作。但是,我不能直接应用像numpy.interp
这样的东西扭曲了原有的功能。
因此,我的问题是在步进函数中增加分辨率的有效(和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()
答案 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)