只使用meshgrid的一部分或替换它来计算函数

2024-04-27 00:24:20 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑:解决方案

答案发布在下面,使用itertools的list prod大大减少了内存使用,因为它是一个list对象,我在链接的线程中忽略了这一点。在

代码:

n = 2 #dimension
r = np.arange(0.2,2.4,0.1) #range

grid = product(r,repeat=n)

for g in grid:
    y = np.array(g)
    if np.all(np.diff(g) > 0) == True:
        print(f(y)) #or whatever you want to do

我试图评估一个在一定范围内有n个参数的函数。我希望能在一定范围内改变n,这样用户就可以用他的输入来确定它。在

我在here的帮助下得到了一个工作代码,它看起来像这样:

^{pr2}$

这只适用于n等于5或6,然后网格数组和输出数组就变大了,Spyder可以处理它(大约10 MB)。在

有没有办法一次只创建一行meshgrid(参数组合)来计算函数?然后我可以将这些值(grid,y)保存在文本文件中,并在下一步中覆盖它们。在

或者有没有一种方法可以在没有meshgrid的情况下创建范围内的所有n维组合,而只使用一个变量n,一次一个?在


Tags: 对象函数内存答案代码编辑参数np
1条回答
网友
1楼 · 发布于 2024-04-27 00:24:20

你可以试试迭代器。似乎itertools.product适合你的需要。在

r = np.arange(0,3,1) #determine range
list(product(r,r))
#[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

更多细节:

^{pr2}$

顺便说一下,y的大小应该是comb(len(r), 3),从len(r)中选择3

from scipy.special import comb
comb(len(r), 3)

或者是一条线

y = [f(g) for g in grid if is_ascending(g)]

其中is_ascending是用户定义的过滤器函数。在

相关问题 更多 >