def boundary_conditions(x, t=None, z=None, NBSYM=2): """ Generates mirrored extrema beyond the singal limits. """ if not t: t = np.arange(len(x)) if not z: z = x indmin, indmax = extr(x)[:2] lmin = indmin[:NBSYM] lmax = indmax[:NBSYM] rmin = indmin[len(indmin) - NBSYM:] rmax = indmax[len(indmax) - NBSYM:] lmin_extended = -1 * lmin[::-1] lmax_extended = -1 * lmax[::-1] rmin_extended = (len(x) - rmin)[::-1] - 1 + len(x) rmax_extended = (len(x) - rmax)[::-1] - 1 + len(x) tmin = np.concatenate((lmin_extended, indmin, rmin_extended)) tmax = np.concatenate((lmax_extended, indmax, rmax_extended)) zmin = x[indmin] zmax = x[indmax] zmin_left = x[lmin][::-1] zmax_left = x[lmax][::-1] zmin_right = x[rmin][::-1] zmax_right = x[rmax][::-1] zmin = np.concatenate((zmin_left, zmin, zmin_right)) zmax = np.concatenate((zmax_left, zmax, zmax_right)) return tmin, tmax, zmin, zmax
def boundary_conditions(x, t=None, z=None, NBSYM=2): """ Generates mirrored extrema beyond the singal limits. """ if not t: t = np.arange(len(x)) if not z: z = x indmin, indmax = extr(x)[:2] lmin = indmin[:NBSYM] lmax = indmax[:NBSYM] rmin = indmin[len(indmin)-NBSYM:] rmax = indmax[len(indmax)-NBSYM:] lmin_extended = -1*lmin[::-1] lmax_extended = -1*lmax[::-1] rmin_extended = (len(x)-rmin)[::-1] - 1 + len(x) rmax_extended = (len(x)-rmax)[::-1] - 1 + len(x) tmin = np.concatenate((lmin_extended,indmin,rmin_extended)) tmax = np.concatenate((lmax_extended,indmax,rmax_extended)) zmin = x[indmin] zmax = x[indmax] zmin_left = x[lmin][::-1] zmax_left = x[lmax][::-1] zmin_right = x[rmin][::-1] zmax_right = x[rmax][::-1] zmin = np.concatenate((zmin_left, zmin, zmin_right)) zmax = np.concatenate((zmax_left, zmax, zmax_right)) return tmin, tmax, zmin, zmax
lmin_extended = -1 * lmin[::-1] lmax_extended = -1 * lmax[::-1] rmin_extended = (len(x) - rmin)[::-1] - 1 + len(x) rmax_extended = (len(x) - rmax)[::-1] - 1 + len(x) tmin = np.concatenate((lmin_extended, indmin, rmin_extended)) tmax = np.concatenate((lmax_extended, indmax, rmax_extended)) zmin = x[indmin] zmax = x[indmax] zmin_left = x[lmin][::-1] zmax_left = x[lmax][::-1] zmin_right = x[rmin][::-1] zmax_right = x[rmax][::-1] zmin = np.concatenate((zmin_left, zmin, zmin_right)) zmax = np.concatenate((zmax_left, zmax, zmax_right)) return tmin, tmax, zmin, zmax if __name__ == "__main__": x = np.random.randn(100) indmin, indmax = extr(x)[:2] plt.plot(x) tmin, tmax, zmin, zmax = boundary_conditions(x) plt.plot(tmin, zmin, 'r.') plt.plot(tmax, zmax, 'g.') plt.show()
rmax = indmax[len(indmax)-NBSYM:] lmin_extended = -1*lmin[::-1] lmax_extended = -1*lmax[::-1] rmin_extended = (len(x)-rmin)[::-1] - 1 + len(x) rmax_extended = (len(x)-rmax)[::-1] - 1 + len(x) tmin = np.concatenate((lmin_extended,indmin,rmin_extended)) tmax = np.concatenate((lmax_extended,indmax,rmax_extended)) zmin = x[indmin] zmax = x[indmax] zmin_left = x[lmin][::-1] zmax_left = x[lmax][::-1] zmin_right = x[rmin][::-1] zmax_right = x[rmax][::-1] zmin = np.concatenate((zmin_left, zmin, zmin_right)) zmax = np.concatenate((zmax_left, zmax, zmax_right)) return tmin, tmax, zmin, zmax if __name__ == "__main__": x = np.random.randn(100) indmin, indmax = extr(x)[:2] plt.plot(x) tmin, tmax, zmin, zmax = boundary_conditions(x) plt.plot(tmin, zmin, 'r.') plt.plot(tmax, zmax, 'g.') plt.show()