Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从具有多个x参数的函数中使用numpy.from函数创建x-dim阵列_Python_Numpy - Fatal编程技术网

Python 从具有多个x参数的函数中使用numpy.from函数创建x-dim阵列

Python 从具有多个x参数的函数中使用numpy.from函数创建x-dim阵列,python,numpy,Python,Numpy,我想从一个5d函数创建一个2D(x,y)数组,比如说一些内核KMID: import numpy as np def KMID(x,y,mumid,delta,cmid): rsq=(x-float(len(x))/2.+0.5)**2+(y-float(len(y))/2.+0.5)**2 return cmid*np.exp(-mumid*np.sqrt(rsq))/(rsq+delta**2) 通过这样的方式: shape=256,256 midscatterkernel

我想从一个5d函数创建一个2D(x,y)数组,比如说一些内核KMID:

import numpy as np
def KMID(x,y,mumid,delta,cmid):
    rsq=(x-float(len(x))/2.+0.5)**2+(y-float(len(y))/2.+0.5)**2
    return cmid*np.exp(-mumid*np.sqrt(rsq))/(rsq+delta**2)
通过这样的方式:

shape=256,256
midscatterkernel=np.fromfunction(KMID(:,:,0.1,0.2,0.3),shape)
这使得:

SyntaxError:无效语法

i、 我想通过迭代前两个索引来创建一个2D数组。
最优雅的方法是什么?

KMID
是一个函数,而不是数组,因此不能使用
对其进行索引。做

midscatterkernel=np.fromfunction(lambda x, y: KMID(x,y,0.1,0.2,0.3), shape)

不要为此使用
np.fromfunction
,因为
KMID
可以接受numpy数组作为参数:

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)

感谢您提供关于np.fromfunction的提示以及如何避免使用它,我不知道它太慢了。