gpt4 book ai didi

python - 从具有超过 x 个参数的函数中使用 numpy.fromfunction 创建一个 x-dim 数组

转载 作者:行者123 更新时间:2023-11-28 20:51:44 24 4
gpt4 key购买 nike

我想从一个 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: invalid syntax

即我想通过迭代前两个索引来制作一个二维数组。执行此操作最优雅的方法是什么?

最佳答案

不要为此使用 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)

关于python - 从具有超过 x 个参数的函数中使用 numpy.fromfunction 创建一个 x-dim 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8820673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com