在矩阵的3维中的前2维中进行平均运算



假设A是如下所示的三维矩阵(2行-2列-2页)。

A(:,:,1)=[1,2;3,4];
A(:,:,2)=[5,6;7,8];

我想要一个向量,比如"a",它的输入是每页矩阵对角线元素的平均值。在这个简单的例子中,a=[(1+4)/2;(5+8)/2]

但我有困难在matlab中这样做。我尝试了下面的代码,但失败了。

mean(A(1,1,:),A(2,2,:))

您可以在定义对角线的两个维度中使用"部分线性索引",如下所示:

  1. 由于部分线性索引只能应用于尾维,所以首先需要应用permute来重新排列维度,使第一个和第二个维度成为第二个和第三个维度。
  2. 现在你保持第一个维度不变,线性索引的对角线在第二个和第三个维度(这有效地减少了这两个维度为一个),并应用mean沿(合并)第二个维度。
代码:

B = permute(A, [3 1 2]);                                   %// step 1: permute
result = mean(B(:,1:size(A,1)+1:size(A,1)*size(A,2)), 2);  %// step 2: index and mean

在你的例子中,

A(:,:,1)=[1,2;3,4];
A(:,:,2)=[5,6;7,8];

这给

result =
    2.5000
    6.5000

您可以使用bsxfun作为通用解决方案-

[m,n,r] = size(A)
mean(A(bsxfun(@plus,[1:n+1:n^2]',[0:r-1]*m*n)),1)

示例运行-

>> A
A(:,:,1) =
     8     4     1
     7     6     3
     1     5     8
A(:,:,2) =
     1     7     6
     8     5     2
     1     2     7
A(:,:,3) =
     6     2     8
     1     1     6
     1     4     5
A(:,:,4) =
     8     1     6
     1     5     1
     9     2     7
>> [m,n,r] = size(A);
>> sum(A(bsxfun(@plus,[1:n+1:n^2]',[0:r-1]*m*n)),1)
ans =
    22    13    12    20
>> mean(A(bsxfun(@plus,[1:n+1:n^2]',[0:r-1]*m*n)),1)
ans =
       7.3333       4.3333            4       6.6667

相关内容

  • 没有找到相关文章

最新更新