希望我能清楚地表达我的问题:我有一个概率密度函数,它是两个分布的卷积。我的功能要求我为每个分布提供均值和方差对。我正在尝试组织我想要评估的均值和方差对的所有不同组合。
我做的第一件事就是用这段代码形成对:
mm=linspace(.1, 1, 2); % mean values
vv=linspace(.1, 2, 2); % variance values
N=length(mm);
n=length(vv);
for i = 1:N
for j = 1:n
p{(i-1)*N+j} = [mm(i), vv(j)];
end
end
所以我的对是p{1} = [.1, .1], p{2} = [.1, 2], p{3} = [1., .1], p{4} = [1.,2.]
。现在,我坚持要形成这些配对的所有可能组合,并要求我不要重复这些配对。 - 我的意思是重复是我的PDF不关心,如果我喂它[p{1}, p{2}]
或[p{2}, p{1}]
- 它会评估相同的(基本上,我的PDF是退出时间的分布和我只关心总时间,这就是为什么订单并不重要)。
所以基本上,我想要一个看起来像这样的数组:
P(1) = [p{1}, p{1}], P(2) = [p{1}, p{2}],
P(3) = [p{1}, p{3}], P(4) = [p{1}, p{4}],
P(5) = [p{2}, p{2}], P(6) = [p{2}, p{3}],
P(7) = [p{2}, p{4}], P(8) = [p{3}, p{3}],
P(9) = [p{3}, p{4}], P(10) = [p{4}, p{4}]
我正在尝试这样做,但在编制索引时遇到了困难
for i = 1:N*n
for j = i:N*n
P = [p{i},p{j}];
end
end
因此,一旦我解决了这个问题,我就可以将这些组合中的所有十种用于评估。这让我想到了另一个问题 - 我的PDF是以这样的方式编写的,它需要4个参数function Y=myPDF(m1,v1,m2,v2)
。例如,如何将[p{1},p{2}]
分开,以便将p{1}
的均值和方差分配给m1,v1
,依此类推。
答案 0 :(得分:1)
使用nchoosek
,sort
和unique
对您的指数采取一种方法:
mm=linspace(.1, 1, 2)'; % mean values
vv=linspace(.1, 2, 2)'; % variance values
N=length(mm);
n=length(vv);
p = cell(N, n);
for i = 1:N
for j = 1:n
p{(i-1)*N+j} = [mm(i), vv(j)];
end
end
temp = nchoosek([1:N*n, 1:N*n], 2); % Get all the permutations
temp = sort(temp, 2); % Sort each permutation by row for an easier unique call
idx = unique(temp, 'rows'); % Get all unique permutations
然后,您可以使用这些索引来引用您的数据:
P = cell(length(idx), 1);
for ii = 1:length(idx)
P{ii} = {p(idx(ii, 1)), p(idx(ii, 2))};
end
可能有更好的方法,但这是一个起点。
编辑:对于问题的第二部分,您可以使用此漂亮的代码行将所有内容转储为双数组:
test = [reshape([p{idx(:,1)}], 2, [])', reshape([p{idx(:,2)}], 2, [])'];
返回:
test =
0.1000 0.1000 0.1000 0.1000
0.1000 0.1000 0.1000 2.0000
0.1000 0.1000 1.0000 0.1000
0.1000 0.1000 1.0000 2.0000
0.1000 2.0000 0.1000 2.0000
0.1000 2.0000 1.0000 0.1000
0.1000 2.0000 1.0000 2.0000
1.0000 0.1000 1.0000 0.1000
1.0000 0.1000 1.0000 2.0000
1.0000 2.0000 1.0000 2.0000