keywords: 穷举组合 参数搜索 grid search
最近找工作,面试的时候需要一个问题,叫参数搜索。
输入:
A = [
[1, 2, 3],
[0.1, 0.2, 0.3],
[10, 20, 30],
]
A的长度不确定,A的每行数量也不确定,求所有的组合,如上是: [1,0.1,10] [1,0.1,20]….等等
思想是:实现不等长度的加法。 先获取数组的结构,比如:[3,3,3], 初始化均为0, 输出一个, 循环,第一位始终加一,如果第一位达到3了,那么该位置0,下一位加1,以此类推。
非递归实现,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
import numpy as np def search(A): nums = len(A) max = [] cur = [] for i in range(nums): max.append(len(A[i])) cur.append(0) max = np.array(max) cur = np.array(cur) mul = 1 #迭代总次数 for m in max: mul = mul*m result = [] for _ in range(mul): one = np.zeros(nums) for i in range(nums): one[i] = A[i][cur[i]] cur[0] += 1 #加1 for idx in range(nums-1): if cur[idx] == max[idx]: cur[idx] = 0 cur[idx+1] += 1 print(one) result.append(one) return result if __name__ == '__main__': A = [ [1, 2, 3], [0.1, 0.2, 0.3], [10, 20, 30], ] print(len(search(A))) |
转载文章,版权归作者所有,转载请联系作者。作者:,来源: