如何向函数传递可变数量列表参数以生成指定结构数组?
解决方案
要扩展函数支持任意数量的列表参数,你可以用*args接收可变参数,再结合itertools.product生成所有参数的笛卡尔积(替代原来的嵌套循环),具体实现如下:
import numpy as np from itertools import product def CreateBoxes(*args): # 生成所有输入列表的笛卡尔积,每个组合转成numpy数组后再整体转为大数组 boxes = np.array([np.array(comb) for comb in product(*args)]) return boxes
说明:
*args的作用:它会把所有传入的列表参数打包成一个元组,比如调用CreateBoxes(x1, x2, x3)时,args就是(x1, x2, x3)。itertools.product的作用:替代原来的嵌套循环for y in x_1 for z in x_2,它能自动处理任意数量输入的笛卡尔积,生成所有可能的维度区间组合。- 输出结构兼容性:当你只传入两个参数时,输出结构和原函数完全一致;传入N个参数时,每个"box"会是N行2列的numpy数组。
示例测试:
# 定义三个维度的区间列表 x1 = [[0, 0.5], [0.5, 1.0]] x2 = [[0, 0.5], [0.5, 1.0]] x3 = [[0, 0.5]] result = CreateBoxes(x1, x2, x3) print(result.shape) # 输出 (4, 3, 2),对应4个组合,每个组合3个维度区间
内容的提问来源于stack exchange,提问作者Michel
相关产品推荐
相关产品推荐

