plotting_backend.py
56 lines
| 1.7 KiB
| text/x-python
|
PythonLexer
MinRK
|
r3675 | """An example of how to use IPython for plotting remote parallel data | |
MinRK
|
r3670 | ||
MinRK
|
r3675 | The two files plotting_frontend.py and plotting_backend.py go together. | |
MinRK
|
r3670 | ||
Bernardo B. Marques
|
r4872 | This file (plotting_backend.py) performs the actual computation. For this | |
MinRK
|
r3670 | example, the computation just generates a set of random numbers that | |
Bernardo B. Marques
|
r4872 | look like a distribution of particles with 2D position (x,y) and | |
MinRK
|
r3670 | momentum (px,py). In a real situation, this file would do some time | |
consuming and complicated calculation, and could possibly make calls | |||
to MPI. | |||
One important feature is that this script can also be run standalone without | |||
Bernardo B. Marques
|
r4872 | IPython. This is nice as it allows it to be run in more traditional | |
MinRK
|
r3670 | settings where IPython isn't being used. | |
MinRK
|
r3675 | When used with IPython.parallel, this code is run on the engines. Because this | |
MinRK
|
r3670 | code doesn't make any plots, the engines don't have to have any plotting | |
packages installed. | |||
""" | |||
# Imports | |||
import numpy as N | |||
import time | |||
import random | |||
# Functions | |||
def compute_particles(number): | |||
x = N.random.standard_normal(number) | |||
y = N.random.standard_normal(number) | |||
px = N.random.standard_normal(number) | |||
py = N.random.standard_normal(number) | |||
return x, y, px, py | |||
def downsample(array, k): | |||
"""Choose k random elements of array.""" | |||
length = array.shape[0] | |||
indices = random.sample(xrange(length), k) | |||
return array[indices] | |||
# Parameters of the run | |||
number = 100000 | |||
d_number = 1000 | |||
# The actual run | |||
time.sleep(0) # Pretend it took a while | |||
x, y, px, py = compute_particles(number) | |||
# Now downsample the data | |||
downx = downsample(x, d_number) | |||
downy = downsample(x, d_number) | |||
downpx = downsample(px, d_number) | |||
downpy = downsample(py, d_number) | |||
print "downx: ", downx[:10] | |||
print "downy: ", downy[:10] | |||
print "downpx: ", downpx[:10] | |||
print "downpy: ", downpy[:10] |