我有m <- a 100*6 matrix
。我想返回6*6 matrix
,6*6 matrix
的条目(i,j)包含以下值:
(mean(col.i)-mean(col.j))/sd(col.i and col.j)
其中sd(col.i和col.j)是col.i and col.j
我想使用apply函数来执行此操作,但我不知道如何组合矩阵m的每两列。那么我怎样才能获得6 * 6矩阵?我应该使用什么功能?(在r中)
答案 0 :(得分:2)
您可以通过i,j
创建expand.grid
索引的所有组合,然后使用mapply
获取矩阵的任何元素。像这样:
#generate a sample matrix
m<-matrix(runif(600),ncol=6)
#generate the indices
indices<-expand.grid(1:6,1:6)
#the result
res<-matrix(mapply(function (x,y) (mean(m[,x])-mean(m[,y]))/sd(m[,c(x,y)]),indices[[1]],indices[[2]]),ncol=6)
答案 1 :(得分:-1)
如果您没有使用平台/语言的任何细节,我可以提供以下一般性建议: 1.找到每列中元素的方法。 2.找到每列中元素的平方和。 然后,您可以使用https://en.wikipedia.org/wiki/Standard_deviation#Identities_and_mathematical_properties处给出的公式来获得所需的标准偏差。公式是:
标准差= sqrt(1 / N *(平方和) - (平均值的平方))