我们得到一个D维张量,表示为大小为n ^ D的向量。
向量表示{0,1,...,n} ^ d中随机变量X \的D维分布。即张量中的(i_1,i_2,...,i_d)条目表示X_1 = i_1,X_2 = i_2,... X_d = i_d的概率。
我需要为每个维度d计算,并在[n]中计算边际分布P(X_d = i)的值。
即,这意味着P(X_d = i)的答案是向量的n ^(D-1)个项的总和。
例如,如果D = 2且n = 4,我们有一个大小为(16,1)的向量x,第一个维度等于1的概率为
P(X_1 = 1)= x(1)+ x(2)+ x(3)+ x(4)
第二维等于3的概率是'
P(X_2 = 3)= x(3)+ x(7)+ x(11)+ x(15)
我正在编写需要计算这些边际分布的Matlab代码,但我不熟悉Matlab以简单的方式完成它(使用一些丑陋的递归是可行的,但必须有更好的选择)。
答案 0 :(得分:2)
要为P(X_k=z)
- 维矩阵计算D
,您可以使用
xD = reshape(x, n*ones(1,D));
B = permute(xD, [k setdiff(1:D, k)]);
P = sum(B(z,:));
它首先使它成为D
- 维矩阵。它将感兴趣的维度k
添加到开头,然后选择z
- 元素并对与其对应的元素求和。
答案 1 :(得分:0)
Mohsen Nosratinia's answer将是我的第一选择。作为替代方案,可以在不重新整形或置换尺寸的情况下完成,这可以产生更快的代码:
k = 2; %// chosen dimension
z = 3; %// chosen value (along d-th dimension)
result = sum(x(mod(floor((0:end-1)/n^(k-1)), n)==z-1));