Не используйте np.fromfunction
для этого, поскольку KMID
может принимать массивы в качестве аргументов:
import numpy as np
def KMID(x, y, mumid, delta, cmid):
rsq = (x-len(x)/2.+0.5)**2+(y-len(y)/2.+0.5)**2
return cmid*np.exp(-mumid*np.sqrt(rsq))/(rsq+delta**2)
lenx, leny = 256, 256
midscatterkernel = KMID(
np.arange(lenx),
np.arange(leny)[:, np.newaxis],
0.1, 0.2, 0.3)
(np.fromfunction
- синтаксический сахар для медленного цикла Python. Если вы можете сделатьТо же самое с операциями с массивами numpy, используйте операции с массивами numpy. Это будет быстрее.)
Однако, чтобы ответить на ваш вопрос, нужно ли вам использовать np.fromfunction
, но вы хотитенекоторые аргументы в качестве констант, то вы можете использовать functools.partial
:
import functools
def KMID(x, y, mumid, delta, cmid):
rsq = (x-len(x)/2.+0.5)**2+(y-len(y)/2.+0.5)**2
return cmid*np.exp(-mumid*np.sqrt(rsq))/(rsq+delta**2)
shape = 256, 256
midscatterkernel = np.fromfunction(functools.partial(KMID,mumid=0.1,delta=0.2,cmid=0.3),shape)