Apply linear map to input points.
The linear map ``offset + scale*x`` that maps the domain `old` to the domain `new` is applied to the points `x`.
Parameters ---------- x : array_like Points to be mapped. If `x` is a subtype of ndarray the subtype will be preserved. old, new : array_like The two domains that determine the map. Each must (successfully) convert to 1-d arrays containing precisely two values.
Returns ------- x_out : ndarray Array of points of the same shape as `x`, after application of the linear map between the two domains.
See Also -------- getdomain, mapparms
Notes ----- Effectively, this implements:
.. math :: x\_out = new0
+ m(x - old0
)
where
.. math :: m = \fracnew[1]-new[0]
Examples -------- >>> from numpy.polynomial import polyutils as pu >>> old_domain = (-1,1) >>> new_domain = (0,2*np.pi) >>> x = np.linspace(-1,1,6); x array(-1. , -0.6, -0.2, 0.2, 0.6, 1.
) >>> x_out = pu.mapdomain(x, old_domain, new_domain); x_out array( 0. , 1.25663706, 2.51327412, 3.76991118, 5.02654825, # may vary
6.28318531
) >>> x - pu.mapdomain(x_out, new_domain, old_domain) array(0., 0., 0., 0., 0., 0.
)
Also works for complex numbers (and thus can be used to map any line in the complex plane to any other line therein).
>>> i = complex(0,1) >>> old = (-1 - i, 1 + i) >>> new = (-1 + i, 1 - i) >>> z = np.linspace(old0
, old1
, 6); z array(-1. -1.j , -0.6-0.6j, -0.2-0.2j, 0.2+0.2j, 0.6+0.6j, 1. +1.j
) >>> new_z = pu.mapdomain(z, old, new); new_z array(-1.0+1.j , -0.6+0.6j, -0.2+0.2j, 0.2-0.2j, 0.6-0.6j, 1.0-1.j
) # may vary