Python 自适应参数数量的网格搜索

文章介绍了如何利用Python的itertools库生成参数全排列,然后通过numpy转换为数组,结合Numba库进行加速的网格搜索方法。当参数数量增加时,该方法能适应性地扩展,并提供了并行处理的选项以提高效率。
摘要由CSDN通过智能技术生成

网格搜索是一种对多个参数组合遍历进行寻优的方法。通过多重for循环可以进行网格。但是当参数的数量增加的时候需要增加for的层数,不利于程序的扩展。

如有两个参数时

# L和M是存放参数的list
for i L:
    for j in M:

当有三个参数时

# L和M是存放参数的list
for i L:
    for j in M:
        for k in P:

通过先对参数进行全排列,然后让生成的全排列转换成numpy数组再逐行遍历的方式进行网格搜索可以方便的自适应参数的数量进行网格搜索和使用numba加速。

1、使用itertools生产全排列迭代器

import itertools
itertools.product(x,y)

2、将迭代器转换为列表进而形成numpy数组

注意:numpy的formiter函数可以直接由迭代器生成数组,但是没有先转list再生成数组方便。

ls=list(itertools.product(x,y))
A_permutation=np.array(ls)
n=len(A_permutation)

3、按行遍历,并进行numba加速

使用numba加速

from numba import njit
@njit()
def grid_search(A_array,n):
    for i in range(n):
        a=A_array[i]
        print(a)

对于大量数据可以使用并行版本,需要进行import prange

from numba import njit,prange
@njit(parallel=True)
def grid_search(A_array,n):
    for i in prange(n):
        a=A_array[i]
        print(a)

4、整体代码

import itertools
import numpy as np
from numba import njit,prange

x=[1,2,3]
y=[4,5,6]

ls=list(itertools.product(x,y))
A_permutation=np.array(ls)
n=len(A_permutation)

@njit(parallel=True)
def grid_search(A_array,n):
    for i in prange(n):
        a=A_array[i]
        print(a)

grid_search(A_permutation,n)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风暴之零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值