如何从一组列表中获取笛卡尔积(每种可能的值组合)?
输入:
somelists = [
[1, 2, 3],
['a', 'b'],
[4, 5]
]
Run Code Online (Sandbox Code Playgroud)
期望的输出:
[(1, 'a', 4), (1, 'a', 5), (1, 'b', 4), (1, 'b', 5), (2, 'a', 4), (2, 'a', 5) ...]
Run Code Online (Sandbox Code Playgroud) 我想比较不同的机器学习算法.作为其中的一部分,我需要能够执行网格搜索以获得最佳超参数.但是,我并没有真正想到为每个固定算法和其超参数的固定子集编写单独的网格搜索实现.相反,我希望它看起来更像是在scikit-learn中,但可能没有那么多功能(例如我不需要多个网格)并且用MATLAB编写.
到目前为止,我试图理解尚未编写的逻辑 grid_search.m
function model = grid_search(algo, data, labels, varargin)
p = inputParser;
% here comes the list of all possible hyperparameters for all algorithms
% I will just leave three for brevity
addOptional(p, 'kernel_function', {'linear'});
addOptional(p, 'rbf_sigma', {1});
addOptional(p, 'C', {1});
parse(p, algo, data, labels, varargin{:});
names = fieldnames(p.Results);
values = struct2cell(p.Results); % a cell array of cell arrays
argsize = 2 * length(names);
args = cell(1, argsize);
args(1 : 2 : argsize) = names; …Run Code Online (Sandbox Code Playgroud) 已经提出并回答了几个类似的问题。可以找到实例,例如:
但是,我所发现的东西都没有完全回答我的问题。
在Haskell中,是否可能以及如何定义一个函数cartesianProduct,该函数任意(有限)地获取许多不同类型的列表,并在鼻子上输出其笛卡尔积?
例如,在上面的链接中,可以找到一个cartesianProd_2优雅地吸收两个不同类型列表的列表:
cartesianProd_2 :: [a] -> [b] -> [(a,b)]
cartesianProd_2 list_A list_B = [(x,y) | x<-list_A, y<-list_B]
Run Code Online (Sandbox Code Playgroud)
cartesianProd_n对于某些固定整数n,可以很容易地将其推广为。
但是,我希望我可以定义一个
cartesianProd (list_1,list_2) == (cartesianProd_2 list_1 list_2)
cartesianProd (list_1,list_2,list_3) == (cartesianProd_3 list_1 list_2 list_3)
-- and so on .. notice that list_i is a list of elements of type i.
Run Code Online (Sandbox Code Playgroud)
一个直接的障碍,我遇到的是,我甚至不知道是什么类型的cartesianProd啊!它的域是(不同类型的列表)的元组!那我该怎么办?
如果在Haskell中无法做到,请提供(指向)指针。
之前已经提出了类似的问题,但我找不到与我的问题完全匹配的问题.
我有4个向量,每个向量保持200-500个4位整数.每个向量中元素的确切数量各不相同,但我可以将其修复为特定值.我需要找到这4个向量中所有元素的可能组合.
例如:
v1 [10,30] v2 [11,45] v3 [63,56] v4 [82,98]
所以我会得到这样的东西:
[10,11,63,82]; [30,11,63,82]; [10,45,63,82]; [10,45,56,82]等..
这个算法有一个共同的名称,所以我可以在网上找到一些参考吗?否则,在C++中实现它的任何提示都会有所帮助.性能不是问题,因为我只需要运行一次算法.STL中是否有任何内置功能?
我试图比较N列表中值的所有组合.每个列表按顺序保持值1到9相同.我很难搞清楚如何编写代码,因为我无法预先创建N个嵌套循环.N是用户定义的,直到运行时才会知道.我总是坚持的地方是尝试使用固定数量的循环遍历任意数量的列表中的每个可能的值组合.
有什么建议?我现在已经尝试了一个小时来解决这个问题.我确信这是我想念的简单事.