[change] consequently use new pdf evaluation concept throughout the entire code

This commit is contained in:
Sebastian Wehling-Benatelli 2016-07-13 14:37:12 +02:00
parent d4fd93ed8f
commit 8433767b22
2 changed files with 14 additions and 44 deletions

View File

@ -307,7 +307,7 @@ class PDFDictionary(object):
pdfs = self.pdf_data[station]
for l, phase in enumerate(pdfs.keys()):
try:
axarr[n, l].plot(pdfs[phase].axis, pdfs[phase].data)
axarr[n, l].plot(pdfs[phase].axis, pdfs[phase].data())
if n is 0:
axarr[n, l].set_title(phase)
if l is 0:
@ -322,7 +322,7 @@ class PDFDictionary(object):
except IndexError as e:
print('trying aligned plotting\n{0}'.format(e))
hide_labels = False
axarr[l].plot(pdfs[phase].axis, pdfs[phase].data)
axarr[l].plot(pdfs[phase].axis, pdfs[phase].data())
axarr[l].set_title(phase)
if l is 0:
axann = axarr[l].annotate(station, xy=(.05, .5),

View File

@ -149,8 +149,8 @@ class ProbabilityDensityFunction(object):
x0, incr, npts = self.commonparameter(other)
axis = create_axis(x0, incr, npts)
pdf_self = np.array([self.data(x) for x in axis])
pdf_other = np.array([other.data(x) for x in axis])
pdf_self = np.array(self.data(axis))
pdf_other = np.array(other.data(axis))
pdf = np.convolve(pdf_self, pdf_other, 'full') * incr
@ -174,8 +174,8 @@ class ProbabilityDensityFunction(object):
x0, incr, npts = self.commonparameter(other)
axis = create_axis(x0, incr, npts)
pdf_self = np.array([self.data(x) for x in axis])
pdf_other = np.array([other.data(x) for x in axis])
pdf_self = np.array(self.data(axis))
pdf_other = np.array(other.data(axis))
pdf = np.correlate(pdf_self, pdf_other, 'full') * incr
@ -193,21 +193,22 @@ class ProbabilityDensityFunction(object):
def __nonzero__(self):
prec = self.precision(self.incr)
data = np.array([self.data(t) for t in self.axis])
data = np.array(self.data())
gtzero = np.all(data >= 0)
probone = bool(np.round(self.prob_gt_val(self.axis[0]), prec) == 1.)
return bool(gtzero and probone)
def __str__(self):
return str([self.data(val) for val in create_axis(self.x0, self.incr,
self.npts)])
return str([self.data()])
@staticmethod
def precision(incr):
prec = int(np.ceil(np.abs(np.log10(incr)))) - 2
return prec if prec >= 0 else 0
def data(self, value):
def data(self, value=None):
if value is None:
return self._pdf(self.axis, self.params)
return self._pdf(value, self.params)
@property
@ -328,7 +329,7 @@ class ProbabilityDensityFunction(object):
def prob_limits(self, limits, oversampling=1.):
sampling = self.incr / oversampling
lim = np.arange(limits[0], limits[1], sampling)
data = [self.data(t) for t in lim]
data = self.data(lim)
min_est, max_est = 0., 0.
for n in range(len(data) - 1):
min_est += min(data[n], data[n + 1])
@ -370,7 +371,7 @@ class ProbabilityDensityFunction(object):
def qtile_dist_quot(self,x):
if x <= 0 or x >= 0.5:
if x < 0 or x > 0.5:
raise ValueError('Value out of range.')
return self.quantile_distance(0.5-x)/self.quantile_distance(x)
@ -378,9 +379,7 @@ class ProbabilityDensityFunction(object):
def plot(self, label=None):
import matplotlib.pyplot as plt
axis = self.axis
plt.plot(axis, self.data(axis))
plt.plot(self.axis, self.data())
plt.xlabel('x')
plt.ylabel('f(x)')
plt.autoscale(axis='x', tight=True)
@ -450,32 +449,3 @@ class ProbabilityDensityFunction(object):
return x0, incr, npts
def rearrange(self, other):
'''
Method rearrange takes another Probability Density Function and returns
a new axis with mid-point 0 and covering positive and negative range
of axis values, either containing the maximum value of both axis or
the sum of the maxima
:param other:
:return:
'''
x0 = self.x0
incr = self.incr
npts = self.npts
pdf_self = np.zeros(npts)
pdf_other = np.zeros(npts)
x = create_axis(x0, incr, npts)
sstart = find_nearest(x, self.x0)
s_end = sstart + self.data.size
ostart = find_nearest(x, other.x0)
o_end = ostart + other.data.size
pdf_self = self.broadcast(pdf_self, sstart, s_end, self.data)
pdf_other = self.broadcast(pdf_other, ostart, o_end, other.data)
return x0, incr, npts, pdf_self, pdf_other