在数组中,apply(x,c(1,2),mean)具体是怎么计算的?是对数组中1,2维矩阵相乘除第4维得到的吗?
简单的例子:
l <- array(1:24,dim = c(2,3,4))
> l
, , 1
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
, , 2
[,1] [,2] [,3]
[1,] 7 9 11
[2,] 8 10 12
, , 3
[,1] [,2] [,3]
[1,] 13 15 17
[2,] 14 16 18
, , 4
[,1] [,2] [,3]
[1,] 19 21 23
[2,] 20 22 24
M <- apply(l,c(1,2),mean)
M
[,1] [,2] [,3]
[1,] 10 12 14
[2,] 11 13 15
其中c(1,2) 1代表行,2代表列, M计算方式就是 l的4组数据中 行和列 对应位置的平均值(M[1,1] =(1+7+13+19)/4=10),其他的数据 以此类推
对上面的补充:
#1,3纬度上的数对2纬度来求平均(即除以3)。即,,1的第一行的数据求和除以3。
> apply(x,c(1,3),mean)
#2,3纬度上的数对1纬度求平均(即除以2)。即,,1的第一列数据求和除以2
> apply(x,c(2,3),mean)
apply(x,c(1,2),mean)
意思是:#1,2纬度上的数对3纬度来求平均。即1,2纬度的,,1中第一条记录,加上,,2第一条记录,加上,,3第一条记录加上,,4第一条记录求平均。
,,1 ,,2 ,,3 ,,4如下:
#Rstudio控制台的内容
> x <- array(rnorm(2*3*4),c(2,3,4))
> x
, , 1
[,1] [,2] [,3]
[1,] -1.042544 -1.041521 1.284045
[2,] -1.618926 -1.196427 2.036937
, , 2
[,1] [,2] [,3]
[1,] 0.8827615 0.2443569 0.4399112
[2,] -0.6728983 0.1800479 -0.2486564
, , 3
[,1] [,2] [,3]
[1,] 0.4385233 0.1771418 -0.514778
[2,] 0.7612346 -1.4176608 -1.193967
, , 4
[,1] [,2] [,3]
[1,] 1.4522751 0.7872514 -0.3324009
[2,] 0.7958228 1.0489825 -0.5487616
那apply是只能沿着一个维度么 能不能沿着两个维度
x赋值函数中的2*3*4分别对应行*列*组(相对应的维度即为1*2*3)
apply(x,c(1,2),mean)中1,2对应的维度为行*列,不需要考虑组,所以对每组相同位置的所有元素相加后求平均,因此输出的结果为2行3列的矩阵
同理,apply(x,c(1,3),mean)中1,3对应的维度为行*组,所以分别对每组中的行求平均,因此输出的结果为2行4列的矩阵(x中有4个组,每组中有2行)
同理,(2,3)就代表列*组了~你自己看看~
就是在数组中1,2维这个平面上对4维求平均 举个例子 假设在(,,1)中对应数据 1 ,在(,,2)对应(1,1)数据2 ,在(,,3)中对应数据 3,在(,,4)中对应数据 4 ,最后就是求1 2 3 4 的平均值 只得到一个二维的结果