Python 移动numpy数组数据以使其仅增长

Python 移动numpy数组数据以使其仅增长,python,numpy,Python,Numpy,我有一个名为data\u saw的numpy数组,它包含数千个浮点数 当可视化时,它看起来是这样的 我的任务是将gap之前的每个元素向下移动180(因为这里的每个gap范围都在180)左右,所以我将得到连续增长的无间隙直线 最后,我在数组中循环并检查每个索引处的间隙(最后一个元素仅用于比较,在进一步的计算中不需要,因此在对齐后将其删除): 试图找出是否有更正确的方法来使用numpy数组执行此操作。是否有?不确定是否更正确,但使用了numpy的本机方法 将numpy导入为np 将matplot

我有一个名为
data\u saw
的numpy数组,它包含数千个浮点数

当可视化时,它看起来是这样的

我的任务是将gap之前的每个元素向下移动
180
(因为这里的每个gap范围都在
180
)左右,所以我将得到连续增长的无间隙直线

最后,我在数组中循环并检查每个索引处的间隙(最后一个元素仅用于比较,在进一步的计算中不需要,因此在对齐后将其删除):


试图找出是否有更正确的方法来使用numpy数组执行此操作。是否有?

不确定是否更正确,但使用了
numpy
的本机方法

将numpy导入为np
将matplotlib.pyplot作为plt导入
数组=np.arange(90)
array=np.连接([array[:30],array[30:+180,array[60:+2*180+30]))
plt.绘图(阵列)

adjusted=array-np.concatenate([[0],((np.diff(array)>=180.cumsum()*180)])
plt.绘图(已调整)

将告诉您差距何时大于某个阈值

mask = np.diff(data_saw) < -90
要规范化数据,只需添加
180*offset
和一些任意偏差:

data_fixed = data_saw + 180 * offset
要使最后一段保持其原始值,请执行以下操作:

data_fixed = data_saw + 180 * (offset - offset[1])
要使第二段保持原样,请执行以下操作:

data_fixed = data_saw + 180 * (offset - offset[-1])
您可以使用类似的方法调整数据,不仅可以调整任意数量的间隙,甚至可以调整超过某个阈值的任意间隙大小

首先,使用以下公式计算与原始
掩码
对应的索引:

固定数据是累积和(前面加零):


我喜欢这个。刚刚做了一个快速基准测试,这个方法的速度大约是通过数组循环的5倍。感谢您提供详细的解决方案。我已修复阈值。它应该是
np.diff(数据_-saw)<-90
当然,
np.diff
在我的例子中返回负值。@MasterDevX。我添加了一个通用的方法来修复gapsCool,这真的很有帮助,也很有用,我很感激。
data_fixed = data_saw + 180 * (offset - offset[1])
data_fixed = data_saw + 180 * (offset - offset[-1])
delta = np.diff(data_saw)
indices = np.flatnonzero(delta < -90)
delta[indices] = 0.5 * (delta[indices - 1] + delta[indices + 1])
data_fixed = np.concatenate(([0], delta)).cumsum() + data_saw[0]