code: def unit_vector(data, axis=None, out=None):
      
      if out is None:
          data = numpy.array(data, dtype=numpy.float64, copy=True)
          if data.ndim == 1:
              data /= math.sqrt(numpy.dot(data, data))
              return data
      else:
          if out is not data:
              out[:] = numpy.array(data, copy=False)
          data = out
      length = numpy.atleast_1d(numpy.sum(data*data, axis))
      numpy.sqrt(length, length)
      if axis is not None:
          length = numpy.expand_dims(length, axis)
      data /= length
      if out is None:
          return data
docs: Return ndarray normalized by length, i.e. eucledian norm, along axis.
  
      >>> v0 = numpy.random.random(3)
      >>> v1 = unit_vector(v0)
      >>> numpy.allclose(v1, v0 / numpy.linalg.norm(v0))
      True
      >>> v0 = numpy.random.rand(5, 4, 3)
      >>> v1 = unit_vector(v0, axis=-1)
      >>> v2 = v0 / numpy.expand_dims(numpy.sqrt(numpy.sum(v0*v0, axis=2)), 2)
      >>> numpy.allclose(v1, v2)
      True
      >>> v1 = unit_vector(v0, axis=1)
      >>> v2 = v0 / numpy.expand_dims(numpy.sqrt(numpy.sum(v0*v0, axis=1)), 1)
      >>> numpy.allclose(v1, v2)
      True
      >>> v1 = numpy.empty((5, 4, 3), dtype=numpy.float64)
      >>> unit_vector(v0, axis=1, out=v1)
      >>> numpy.allclose(v1, v2)
      True
      >>> list(unit_vector([]))
      []
      >>> list(unit_vector([1.0]))
      [1.0]