如何在Matlab中求和高张量张量的子张量?

时间:2014-10-01 14:59:11

标签: matlab vector multidimensional-array

我们得到一个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以简单的方式完成它(使用一些丑陋的递归是可行的,但必须有更好的选择)。

2 个答案:

答案 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));
相关问题