예제 #1
0
def gradient(f, *varargs):
    '''Gradient of array
    
    f -- array
    *varargs -- 0, 1, N scalars for sample distance, or (1 or N-d) datasets for sample points
    '''

    if varargs is None or len(varargs) == 0:
        g = _maths.gradient(f)
    else:
        # check for scalars, etc
        from jycore import arange as _ar
        vl = len(varargs)
        nd = f.getRank()
        if vl == 1:
            varargs = [varargs[0]]*nd
            vl = nd
        if vl != nd:
            raise ValueError, "Number of arguments must be 0, 1 or rank of f"

        xlist = []
        for i in range(vl):
            x = varargs[i]
            xlist.append(x if isinstance(x, _ds) else (_ar(f.shape[i])*x)._jdataset())
        g = _maths.gradient(f, xlist)

    if len(g) == 1:
        return g[0]
    return g
예제 #2
0
	def getPolarDataset(self, datasetX, datasetY):
		datasetRho = DatasetMaths.sqrt( DatasetMaths.power(datasetX, 2) + DatasetMaths.power(datasetY, 2) );
		datasetTheta=DatasetMaths.arctan2(datasetY, datasetX);

		datasetThetaInDegree = DatasetMaths.toDegrees(datasetTheta);
		
		return [datasetRho, datasetThetaInDegree];
예제 #3
0
def gradient(f, *varargs):
    '''Gradient of array
    
    f -- array
    *varargs -- 0, 1, N scalars for sample distance, or (1 or N-d) datasets for sample points
    '''

    if varargs is None or len(varargs) == 0:
        g = _maths.gradient(f)
    else:
        # check for scalars, etc
        from .jycore import arange as _ar
        vl = len(varargs)
        nd = f.getRank()
        if vl == 1:
            varargs = [varargs[0]] * nd
            vl = nd
        if vl != nd:
            raise ValueError("Number of arguments must be 0, 1 or rank of f")

        xlist = []
        for i in range(vl):
            x = varargs[i]
            xlist.append(x if isinstance(x, _ds) else (_ar(f.shape[i]) *
                                                       x)._jdataset())
        g = _maths.gradient(f, xlist)

    if len(g) == 1:
        return g[0]
    return g
예제 #4
0
 def renderShapesOntoDataset(self, targetDataset):
     if self.shapesToPaint == {}:
         return targetDataset.clone()
     a = targetDataset.max()
     b = targetDataset.min()
     image = self.renderShapes(targetDataset)
     image.imultiply(b - (a - b))
     return Maths.add(targetDataset, image)
예제 #5
0
	def _process(self,xDataSet, yDataSet):
		dyDataSet = Maths.derivative(xDataSet._jdataset(), yDataSet._jdataset(), self.smoothwidth)
		minVal, maxVal = dyDataSet.min(), dyDataSet.max()
		if maxVal - minVal == 0:
			raise ValueError("There is no edge")

		labels = [label if label != 'slope' else 'top' for label in self.labelList]
		return GaussianPeak(self.name, labels, self.formatString, self.plotPanel)._process(xDataSet, dyDataSet)
예제 #6
0
	def _process(self, xDataSet, yDataSet):
		dyDataSet = dnp.array(Maths.derivative(xDataSet._jdataset(), yDataSet._jdataset(), self.smoothwidth))
		uposC, ufwhmC, uareaC, dposC, dfwhmC, dareaC = self.coarseProcess(xDataSet, dyDataSet)
		gaussian = dnp.fit.function.gaussian

		if abs(dareaC) < 0.2 * uareaC:
			r = dnp.fit.fit([gaussian], xDataSet, dyDataSet,
							[uposC, ufwhmC, uareaC],
							bounds=[
								(uposC - 2 * ufwhmC, uposC + 2 * ufwhmC),
								(0, 2 * ufwhmC),
								(0, 2 * uareaC)],
							ptol=1e-10, optimizer=self.optimizer)
			upos, ufwhm, _uarea = r.parameters
			results = {'upos': upos, 'ufwhm': ufwhm, 'area': _uarea, 'uarea': _uarea, 'fwhm': ufwhm}

		elif uareaC < 0.2 * abs(dareaC):
			r = dnp.fit.fit([gaussian], xDataSet, dyDataSet,
							[dposC, dfwhmC, dareaC],
							bounds=[
								(dposC - 2 * dfwhmC, dposC + 2 * dfwhmC),
								(0, 2 * dfwhmC),
								(2 * dareaC, 0)],
							ptol=1e-10, optimizer=self.optimizer)
			dpos, dfwhm, _darea = r.parameters
			results = {'dpos': dpos, 'dfwhm': dfwhm, 'area': abs(_darea), 'darea': _darea, 'fwhm': dfwhm}

		else:
			r = dnp.fit.fit([gaussian, gaussian], xDataSet, dyDataSet,
							[uposC, ufwhmC, uareaC,dposC, dfwhmC, dareaC],
							bounds=[
								(uposC - 2 * ufwhmC, uposC + 2 * ufwhmC),
								(0, 2 * ufwhmC),
								(0, 2 * uareaC),
								(dposC - 2 * dfwhmC, dposC + 2 * dfwhmC),
								(0, 2 * dfwhmC),
								(2 * dareaC, 0)],
							ptol=1e-10, optimizer=self.optimizer)
			upos, ufwhm, _uarea, dpos, dfwhm, _darea = r.parameters
			results = {'upos': upos,
					'dpos': dpos,
					'ufwhm': ufwhm,
					'dfwhm': dfwhm,
					'uarea': _uarea,
					'darea': _darea,
					'centre': (upos + dpos) / 2.0,
					'width': abs(upos - dpos),
					'area': (_uarea + abs(_darea)) / 2.0,
					'fwhm': (ufwhm + dfwhm) / 2.0}

		self.plotResult(r)
		results['residual'] = r.residual
		return [results.get(label, float('NaN')) for label in self.labelList]
예제 #7
0
def interp(x, xp, fp, left=None, right=None):
    '''Linearly interpolate'''
    x = _asarray(x)
        
    xp = _asarray(xp)
    fp = _asarray(fp)
    if left is None:
        left = fp[0]
    if right is None:
        right = fp[-1]
    r = _asarray(_maths.interpolate(xp._jdataset(), fp._jdataset(), x._jdataset(), left, right))
    if x.ndim == 0:
        return r.item()
    return r
예제 #8
0
def interp(x, xp, fp, left=None, right=None):
    '''Linearly interpolate'''
    x = _asarray(x)
        
    xp = _asarray(xp)
    fp = _asarray(fp)
    if left is None:
        left = fp[0]
    if right is None:
        right = fp[-1]
    r = _asarray(_maths.interpolate(xp._jdataset(), fp._jdataset(), x._jdataset(), left, right))
    if x.ndim == 0:
        return r.item()
    return r
예제 #9
0
def square(a, out=None):
    '''Square of input'''
    return _maths.square(a, out)
예제 #10
0
def floor(a, out=None):
    '''Largest integer smaller or equal to input'''
    return _maths.floor(a, out)
예제 #11
0
def log1p(x, out=None):
    '''Natural logarithm of (x+1)'''
    return _maths.log1p(x, out)
예제 #12
0
def expm1(x, out=None):
    '''Exponential of (x-1)'''
    return _maths.expm1(x, out)
예제 #13
0
def diff(a, order=1, axis=-1):
    '''Difference of input'''
    return _maths.difference(a, order, axis)
예제 #14
0
def log10(a, out=None):
    '''Logarithm of input to base 10'''
    return _maths.log10(a, out)
예제 #15
0
def power(a, p, out=None):
    '''Input raised to given power'''
    return _maths.power(a, p, out)
예제 #16
0
def sign(a, out=None):
    '''Sign of input, indicated by -1 for negative, +1 for positive and 0 for zero'''
    return _maths.signum(a, out)
예제 #17
0
def sqrt(a, out=None):
    '''Square root of input'''
    return _maths.sqrt(a, out)
예제 #18
0
def square(a, out=None):
    '''Square of input'''
    return _maths.square(a, out)
예제 #19
0
def expm1(x, out=None):
    '''Exponential of (x-1)'''
    return _maths.expm1(x, out)
예제 #20
0
def exp(a, out=None):
    '''Exponential of input'''
    return _maths.exp(a, out)
예제 #21
0
def log1p(x, out=None):
    '''Natural logarithm of (x+1)'''
    return _maths.log1p(x, out)
예제 #22
0
def rint(a, out=None):
    '''Round elements of input to nearest integers'''
    return _maths.rint(a, out)
예제 #23
0
def floor(a, out=None):
    '''Largest integer smaller or equal to input'''
    return _maths.floor(a, out)
예제 #24
0
def rad2deg(a, out=None):
    '''Convert from radian to degree'''
    return _maths.toDegrees(a, out)
예제 #25
0
def phase(a, keepzeros=False):
    '''Calculate phase of input by dividing by amplitude
    
    keepzeros -- if True, pass zeros through, else return complex NaNs
    '''
    return _maths.phaseAsComplexNumber(a, keepzeros)
예제 #26
0
def clip(a, a_min, a_max, out=None):
    '''Clip input to given bounds (replace NaNs with midpoint of bounds)'''
    return _maths.clip(a, a_min, a_max, out)
예제 #27
0
def log(a, out=None):
    '''Natural logarithm of input'''
    return _maths.log(a, out)
예제 #28
0
def ceil(a, out=None):
    '''Smallest integer greater or equal to input'''
    return _maths.ceil(a, out)
예제 #29
0
def log(a, out=None):
    '''Natural logarithm of input'''
    return _maths.log(a, out)
예제 #30
0
def arctanh(a, out=None):
    '''Inverse hyperbolic tangent of input'''
    return _maths.arctanh(a, out)
예제 #31
0
def rint(a, out=None):
    '''Round elements of input to nearest integers'''
    return _maths.rint(a, out)
예제 #32
0
def log10(a, out=None):
    '''Logarithm of input to base 10'''
    return _maths.log10(a, out)
예제 #33
0
def trunc(a, out=None):
    '''Truncate elements of input to nearest integers'''
    return _maths.truncate(a, out)
예제 #34
0
def exp(a, out=None):
    '''Exponential of input'''
    return _maths.exp(a, out)
예제 #35
0
def rad2deg(a, out=None):
    '''Convert from radian to degree'''
    return _maths.toDegrees(a, out)
예제 #36
0
def sqrt(a, out=None):
    '''Square root of input'''
    return _maths.sqrt(a, out)
예제 #37
0
def deg2rad(a, out=None):
    '''Convert from degree to radian'''
    return _maths.toRadians(a, out)
예제 #38
0
def power(a, p, out=None):
    '''Input raised to given power'''
    return _maths.power(a, p, out)
예제 #39
0
def sign(a, out=None):
    '''Sign of input, indicated by -1 for negative, +1 for positive and 0 for zero'''
    return _maths.signum(a, out)
예제 #40
0
def ceil(a, out=None):
    '''Smallest integer greater or equal to input'''
    return _maths.ceil(a, out)
예제 #41
0
def negative(a, out=None):
    '''Negate input'''
    return _maths.negative(a, out)
예제 #42
0
def trunc(a, out=None):
    '''Truncate elements of input to nearest integers'''
    return _maths.truncate(a, out)
예제 #43
0
def clip(a, a_min, a_max, out=None):
    '''Clip input to given bounds (replace NaNs with midpoint of bounds)'''
    return _maths.clip(a, a_min, a_max, out)
예제 #44
0
def deg2rad(a, out=None):
    '''Convert from degree to radian'''
    return _maths.toRadians(a, out)
예제 #45
0
def minimum(a, b, out=None):
    '''Item-wise minimum'''
    return _maths.minimum(a, b)
예제 #46
0
def negative(a, out=None):
    '''Negate input'''
    return _maths.negative(a, out)
예제 #47
0
def diff(a, order=1, axis=-1):
    '''Difference of input'''
    return _maths.difference(a, order, axis)
예제 #48
0
def minimum(a, b, out=None):
    '''Item-wise minimum'''
    return _maths.minimum(a, b)
예제 #49
0
def cbrt(a):
    '''Cube root of input'''
    return _maths.cbrt(a)
예제 #50
0
def dividez(a, b):
    '''Divide one array-like object by another with items that are zero divisors set to zero'''
    return _maths.dividez(a, b)
예제 #51
0
def tanh(a, out=None):
    '''Hyperbolic tangent of input'''
    return _maths.tanh(a, out)
예제 #52
0
def abs(a, out=None): #@ReservedAssignment
    '''Absolute value of input'''
    return _maths.abs(a, out)
예제 #53
0
def arctanh(a, out=None):
    '''Inverse hyperbolic tangent of input'''
    return _maths.arctanh(a, out)
예제 #54
0
def dividez(a, b):
    '''Divide one array-like object by another with items that are zero divisors set to zero'''
    return _maths.dividez(a, b)
예제 #55
0
def arccosh(a, out=None):
    '''Inverse hyperbolic cosine of input'''
    return _maths.arccosh(a, out)
예제 #56
0
def phase(a, keepzeros=False):
    '''Calculate phase of input by dividing by amplitude
    
    keepzeros -- if True, pass zeros through, else return complex NaNs
    '''
    return _maths.phaseAsComplexNumber(a, keepzeros)
예제 #57
0
def tanh(a, out=None):
    '''Hyperbolic tangent of input'''
    return _maths.tanh(a, out)
예제 #58
0
def cbrt(a):
    '''Cube root of input'''
    return _maths.cbrt(a)
예제 #59
0
def arccosh(a, out=None):
    '''Inverse hyperbolic cosine of input'''
    return _maths.arccosh(a, out)