You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.8 KiB
87 lines
2.8 KiB
import sys, os |
|
from jmclient import rand_exp_array, rand_norm_array, rand_pow_array |
|
try: |
|
import matplotlib.pyplot as plt |
|
import numpy as np |
|
except ImportError: |
|
print 'Install matplotlib and numpy to run this test' |
|
sys.exit(0) |
|
|
|
|
|
def test_power(): |
|
a = 5. # shape |
|
samples = 10000 |
|
s1 = np.random.power(a, samples) |
|
s2 = common.rand_pow_array(a, samples) |
|
|
|
plt.figure('power test') |
|
count1, bins1, ignored1 = plt.hist(s1, |
|
bins=30, |
|
label='numpy', |
|
histtype='step') |
|
x = np.linspace(0, 1, 100) |
|
y = a * x**(a - 1.0) |
|
normed_y1 = samples * np.diff(bins1)[0] * y |
|
plt.plot(x, normed_y1, label='numpy.random.power fit') |
|
|
|
count2, bins2, ignored2 = plt.hist(s2, |
|
bins=30, |
|
label='joinmarket', |
|
histtype='step') |
|
normed_y2 = samples * np.diff(bins2)[0] * y |
|
plt.plot(x, normed_y2, label='common.rand_pow_array fit') |
|
plt.title('testing power distribution') |
|
plt.legend(loc='upper left') |
|
plt.show() |
|
|
|
|
|
def test_choice(): |
|
|
|
xaxis_divisions = 100 |
|
sinp = np.sin(np.arange(xaxis_divisions) * 2 * np.pi / xaxis_divisions)**2 |
|
sinp /= sum(sinp) |
|
sinp = list(sinp) |
|
|
|
sincp = np.sinc((np.arange(xaxis_divisions) - 2 * xaxis_divisions / 3) * 2 * |
|
np.pi / xaxis_divisions)**2 |
|
sincp /= sum(sincp) |
|
sincp = list(sincp) |
|
|
|
x = np.arange(xaxis_divisions) * 2 * np.pi / xaxis_divisions |
|
gamma2p = x**2 * np.exp(-2 * x) |
|
gamma2p /= sum(gamma2p) |
|
gamma2p = list(gamma2p) |
|
|
|
plt.figure('choice test') |
|
for p, name in ((sinp, 'sin'), (sincp, 'sinc'), (gamma2p, 'gamma(2, 2)')): |
|
#for p, name in ((sincp, 'sincp'), ): |
|
samples = 50000 |
|
common_data = [] |
|
numpy_data = [] |
|
for i in range(samples): |
|
cpoint = common.rand_weighted_choice(xaxis_divisions, p) |
|
common_data.append(cpoint) |
|
nppoint = np.random.choice(xaxis_divisions, p=p) |
|
numpy_data.append(nppoint) |
|
|
|
count1, bins1, ignored1 = plt.hist(common_data, |
|
bins=xaxis_divisions, |
|
label=name + 'joinmarket', |
|
histtype='step') |
|
count2, bins2, ignored2 = plt.hist(numpy_data, |
|
bins=xaxis_divisions, |
|
label=name + 'numpy', |
|
histtype='step') |
|
|
|
plt.title('testing choice') |
|
plt.legend(loc='upper left') |
|
plt.show() |
|
|
|
|
|
def main(): |
|
test_power() |
|
test_choice() |
|
|
|
|
|
if __name__ == '__main__': |
|
main()
|
|
|