如何通过排除R中的对角元素来找到方阵元素的均值?

通过排除对角线元素,可以找到矩阵元素的均值,这实际上是下三角矩阵和上三角矩阵的均值。我们可以通过创建上下三角矩阵的向量来简单地使用均值函数,如以下示例所示。

例1

> M1<-matrix(rpois(20,5),nrow=5)
> M1

输出结果

   [,1] [,2] [,3] [,4]
[1,] 1    6    3    6
[2,] 8    5    3    4
[3,] 5    4    4    6
[4,] 5    5    3    4
[5,] 4    8    1    3

示例

> mean(c(M1[upper.tri(M1)],M1[lower.tri(M1)]))

输出结果

[1] 4.625

例2

> M2<-matrix(rpois(100,5),ncol=10)
> M2

输出结果

   [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 3    7    2    4   10    9    4    7    3    2
[2,] 3    4    5    5    7    4    7    2    5    5
[3,] 3    2    3   12    5    2    3    4    6    4  
[4,] 2    4    6    1    7    4    8   10    8    0
[5,] 6    4    4    4    7    4    7    4    5    7
[6,] 5    8    6    5    9    7    5    4    4    1
[7,] 5    3    5    3    6    1    1    9    6    1
[8,] 7    4    5    1    6    5    2    6    5    5
[9,] 4    7    6    8    4    4    7    5    1    6
[10,] 1   9    4    4    1    2    2    5    5    4

示例

> mean(c(M2[upper.tri(M2)],M2[lower.tri(M2)]))

输出结果

[1] 4.844444

例子3

> M3<-matrix(rnorm(36,6,2.1),nrow=6)
> M3

输出结果

        [,1]      [,2]     [,3]     [,4]    [,5]    [,6]
[1,] 11.102747 3.667257 2.674908 1.685490 7.297186 3.675492
[2,] 5.514661 7.012920 5.452867 5.890710 3.347643 4.944706
[3,] 5.842299 5.090597 5.764840 5.274849 7.210516 6.025230
[4,] 4.848784 6.171407 5.374152 10.452946 5.642747 8.886984
[5,] 9.387442 9.055521 8.677278 5.539050 5.648067 6.655354
[6,] 8.664883 5.976989 3.664106 5.527728 6.268774 8.135999

示例

> mean(c(M3[upper.tri(M3)],M3[lower.tri(M3)]))

输出结果

[1] 5.797854

例子4

> M4<-matrix(sample(11:20,64,replace=TRUE),nrow=8)
> M4

输出结果

[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 18 12 18 16 19 15 17 15
[2,] 11 11 20 18 13 19 13 15
[3,] 12 14 17 17 19 12 11 13
[4,] 18 14 14 19 16 19 11 11
[5,] 11 19 15 19 12 20 17 17
[6,] 18 19 15 12 14 15 20 19
[7,] 20 16 16 19 18 20 14 11
[8,] 12 20 13 19 20 19 11 16

示例

> mean(c(M4[upper.tri(M4)],M4[lower.tri(M4)]))

输出结果

[1] 15.91071

范例5

> M5<-matrix(runif(36,2,10),ncol=6)
> M5

输出结果

       [,1]     [,2]      [,3]     [,4]     [,5]    [,6]
[1,] 5.315719 7.590613 2.964828 2.510046 8.887437 3.377134
[2,] 3.393052 3.308531 5.938284 9.757756 7.803694 7.147399
[3,] 7.140688 7.942123 9.287733 6.907886 4.403413 2.938388
[4,] 3.171102 6.164160 4.408718 6.946996 5.626955 9.479825
[5,] 6.982951 8.210883 3.677973 9.643256 6.250810 6.695614
[6,] 7.575222 9.967751 6.816987 3.348135 7.717623 6.192853

示例

> mean(c(M5[upper.tri(M5)],M5[lower.tri(M5)]))

输出结果

[1] 6.272997

范例6

> M6<-matrix(sample(501:999,64),nrow=8)
> M6

输出结果

[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 990 725 549 896 867 619 764 682
[2,] 602 593 579 829 538 964 939 864
[3,] 889 878 851 911 886 834 693 730
[4,] 736 969 603 545 849 936 515 532
[5,] 982 856 771 925 877 972 647 570
[6,] 890 655 961 883 504 843 950 537
[7,] 766 726 628 870 899 585 687 536
[8,] 853 633 560 729 887 680 527 629

示例

> mean(c(M6[upper.tri(M6)],M6[lower.tri(M6)]))

输出结果

[1] 756.4286