gpt4 book ai didi

matlab - MATLAB中不同长度向量索引的所有组合

转载 作者:行者123 更新时间:2023-12-03 03:50:39 24 4
gpt4 key购买 nike

我有一个一维元胞数组 Z。Z 的每个元胞都包含一个向量。例如:

Z{1} = [1 2];
Z{2} = [3 4 5];
Z{3} = [6];
...
Z{length(Z)} = [10 11 12 13];

这些向量的大小都不同。我想要做的是将所有可能组合的函数值之和与每个 Z{i} 中的一个元素进行比较。也就是说我想比较以下所有组合:

func(1) + func(3) + func(6) + ...
func(1) + func(4) + func(6) + ...
func(1) + func(5) + func(6) + ...
func(2) + func(3) + func(6) + ...
func(2) + func(4) + func(6) + ...
func(2) + func(5) + func(6) + ...
...
...

我想知道哪种组合产生最大的结果。

我怎样才能巧妙地做到这一点?越聪明越好。但我也在寻找任何工作代码。问题规模会很小。

注意:本示例中使用的实际值 1、2、3、4、5、6、... 只是示例。它们没有任何特定的模式。

最佳答案

考虑以下解决方案,它有一个循环,但它按时间线性而不是指数执行您想要的操作。

迭代地,该算法在 Z 的所有行中运行,从而在 Z{i} 行的条目之间生成所有可能的路径 。尽管如此,每个条目仅解析一次,因此可以节省复杂性。

 N = 3;

Z = cell(1,N);

Z{1} = [1 2];
Z{2} = [3 4 5];
Z{3} = [6];

f = @(x) x.^2; %% Test function



disp('init')
res = arrayfun(f,(Z{1})) %% Init step. Image of Z{1}
for i = 2 : N
disp(i) %% just to have an idea of where you are in the process
disp(res)

t = bsxfun(@plus,res,arrayfun(f,(Z{i}))') %In a tensor way you build all
%the possible sum of the res and f(Z{i})
%making all paths.
res = reshape(t,1,[]) %You put the tensor sum on a single
%row to be able to iterate.
disp('END step-------')
end

用方 block 测试

res =

46 53 62 49 56 65

例如46 = 1^2 + 3^2 + 6^249 = 2^2 + 3^2 + 6^2...

到目前为止,我不确定你是否可以完全避免循环。我在这里所做的是动态构建解决方案,在每次迭代时添加单元格的一个元素。

张量求和技术(t = bsxfun(@plus,res,arrayfun(f,(Z{i}))'))来自 this answer .

关于matlab - MATLAB中不同长度向量索引的所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13433088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com