def fake_model(data1, data2, p1, p2):
grid_size = 5
nobs = 5
obs = np.zeros(nobs)
data1 = np.arange(nobs)
data2 = np.arange(nobs)
a = np.arange(grid_size)
b = np.arange(grid_size)
c = np.arange(grid_size)
ss = np.zeros(0)
for p1 in a:
for p2 in b:
ans = fake_model(data1, data2, p1, p2)
#ss = np.append(ss, np.sum(obs - ans)**2)
print ans
which would produce
[0 1 2 3 4]
[0 1 2 3 4]
[0 1 2 3 4]
[0 1 2 3 4]
[0 1 2 3 4]
[0 1 2 3 4]
[0 2 4 6 8]
.
snip
.
[0 1 2 3 4]
[ 0 5 10 15 20]
[ 0 9 18 27 36]
[ 0 13 26 39 52]
[ 0 17 34 51 68]
And so I figured something like...
a = np.ones((grid_size,grid_size)) * np.arange(grid_size)[None,:]
b = np.ones((grid_size,grid_size)) * np.arange(grid_size)[:,None]
ans = fake_model(data1, data2, a, b)
Although this doesn't seem to work, but I think this might be along the right lines? This produces
[[ 0. 1. 2. 3. 4.]
[ 0. 2. 6. 12. 20.]
[ 0. 3. 10. 21. 36.]
[ 0. 4. 14. 30. 52.]
[ 0. 5. 18. 39. 68.]]