有一种“简单”的方法可以找到范围为1的翻转,但对于连续重复的翻转不起作用。
before = np.array([0,0,1,0,0,1,0,1,1,1,2,2,1,2,1,1,1,0,1,0,0])
goal = np.array( [0,0,0,0,0,0,1,1,1,1,2,2,2,1,1,1,1,1,0,0,0])
diff = np.diff(before)
diff[:-1][(diff == 0)[1:]] = 0
after = before - np.r_[0,diff]
plt.plot(before, linestyle='--',label='before')
plt.plot(goal, linestyle='-.',label='goal')
plt.plot(after, linestyle=':', label='after')
plt.legend();
输出
可以使用更大的步长和负“跳跃”。
before = np.array([0,0,-1,0,0,1,0,1,1,1,4,4,1,4,1,1,1,0,1,0,0])
goal = np.array( [0,0, 0,0,0,0,1,1,1,1,4,4,4,1,1,1,1,1,0,0,0])
diff = np.diff(before)
diff[:-1][(diff == 0)[1:]] = 0
after = before - np.r_[0,diff]
plt.plot(before, linestyle='--',label='before')
plt.plot(goal, linestyle='-.',label='goal')
plt.plot(after, linestyle=':', label='after')
plt.legend();
输出
解决方案的限制
before = [0,1,0,1,0,1,1,1,1]
goal = [0,0,0,0,1,1,1,1,1]
0,1,2
或0,1,1,2
可能吗?甚至是0,2
? - Wups[1,2,5,10]
作为我的过滤器值的原因。 - Oliver Prislan