def central_diff_weights(Np, ndiv=1):
 if (Np < (ndiv + 1)):
  raise ValueError('Number of points must be at least the derivative order + 1.')
 if ((Np % 2) == 0):
  raise ValueError('The number of points must be odd.')
 from scipy import linalg
 ho = (Np >> 1)
 x = arange((- ho), (ho + 1.0))
 x = x[:, newaxis]
 X = (x ** 0.0)
 for k in range(1, Np):
  X = hstack([X, (x ** k)])
 w = (product(arange(1, (ndiv + 1)), axis=0) * linalg.inv(X)[ndiv])
 return w

def central_diff_weights ( Np , ndiv = 1 ) : if ( Np < ( ndiv + 1 ) ) : raise ValueError ( 'Number of points must be at least the derivative order + 1.' ) if ( ( Np % 2 ) == 0 ) : raise ValueError ( 'The number of points must be odd.' ) from scipy import linalg ho = ( Np >> 1 ) x = arange ( ( - ho ) , ( ho + 1.0 ) ) x = x [ : , newaxis ] X = ( x ** 0.0 ) for k in range ( 1 , Np ) : X = hstack ( [ X , ( x ** k ) ] ) w = ( product ( arange ( 1 , ( ndiv + 1 ) ) , axis = 0 ) * linalg . inv ( X ) [ ndiv ] ) return w
return weights for an np-point central derivative .