phistogram.py
40 lines
| 1.3 KiB
| text/x-python
|
PythonLexer
MinRK
|
r3670 | """Parallel histogram function""" | ||
import numpy | ||||
MinRK
|
r3675 | from IPython.utils.pickleutil import Reference | ||
MinRK
|
r3670 | |||
MinRK
|
r3675 | def phistogram(view, a, bins=10, rng=None, normed=False): | ||
MinRK
|
r3670 | """Compute the histogram of a remote array a. | ||
MinRK
|
r3675 | Parameters | ||
---------- | ||||
view | ||||
IPython DirectView instance | ||||
MinRK
|
r3670 | a : str | ||
String name of the remote array | ||||
bins : int | ||||
Number of histogram bins | ||||
rng : (float, float) | ||||
Tuple of min, max of the range to histogram | ||||
normed : boolean | ||||
Should the histogram counts be normalized to 1 | ||||
""" | ||||
MinRK
|
r3675 | nengines = len(view.targets) | ||
# view.push(dict(bins=bins, rng=rng)) | ||||
with view.sync_imports(): | ||||
import numpy | ||||
rets = view.apply_sync(lambda a, b, rng: numpy.histogram(a,b,rng), Reference(a), bins, rng) | ||||
hists = [ r[0] for r in rets ] | ||||
lower_edges = [ r[1] for r in rets ] | ||||
# view.execute('hist, lower_edges = numpy.histogram(%s, bins, rng)' % a) | ||||
lower_edges = view.pull('lower_edges', targets=0) | ||||
hist_array = numpy.array(hists).reshape(nengines, -1) | ||||
# hist_array.shape = (nengines,-1) | ||||
MinRK
|
r3670 | total_hist = numpy.sum(hist_array, 0) | ||
if normed: | ||||
total_hist = total_hist/numpy.sum(total_hist,dtype=float) | ||||
return total_hist, lower_edges | ||||