2014-10-06 2 views
0

나는 m <- a 100*6 matrix을가집니다. 나는 6*6 matrix, 그리고 엔트리 6*6 matrix는 다음과 같은 값을 포함의 (I, J)을 반환 할 :r에 행렬을 연산하는 함수

(mean(col.i)-mean(col.j))/sd(col.i and col.j) 
SD (col.i 및 col.j가) 모든 값의 표준 편차 모두에서입니다

col.i and col.j

이 함수를 적용하려면 사용하고 싶지만 행렬 m의 각 두 열을 결합하는 방법을 모르겠습니다. 그러면 어떻게 6 * 6 매트릭스를 얻을 수 있습니까? 어떤 기능을 사용해야합니까? (r)

+0

가독성과 디버깅 용이성을 위해 실제로는 루프를 사용하는 것이 좋습니다. 그런 다음 나중에 성능을 필요로하는 경우 나중에 적용 함수로 감쌀 수 있습니다. – shadowtalker

+0

적용 기능 만 사용하면됩니까? – John777

+0

그건 제가 제안한 것과 정반대입니다. 알고리즘을 올바르게하려면 * 루프 *로 먼저 시도해보십시오. 'apply'로 시작하는 것은 조기 최적화의 한 형태 인 경우가 많으며 일반적으로 나쁜 아이디어입니다. 그러나이 경우 @nicola의 대답은 정확하고 읽기 쉽고 좋은 R 스타일을 나타내며 사용법을 배우기 위해 협박 할 수있는 'mapply'의 좋은 데모입니다. – shadowtalker

답변

-1

사용중인 플랫폼/언어에 대한 세부 정보가 없으면 다음과 같은 일반적인 제안을 드릴 수 있습니다. 1. 각 열에있는 요소의 의미를 찾습니다. 2. 각 열에있는 요소의 제곱의 합을 찾습니다. 다음 수식을 https://en.wikipedia.org/wiki/Standard_deviation#Identities_and_mathematical_properties에 사용하여 필요한 표준 편차를 얻을 수 있습니다. 공식은 다음

표준 편차 = SQRT (1/N 제곱 * (합) - 평균의 (제곱)) 참고 expand.grid 통해 i,j 인덱스의 모든 콤보 만들고 mapply 사용할 수

+0

이 작업을 수행하려면 apply 함수를 사용하고 그 함수는 모든 행렬에 대해 작동 할 수 있어야합니다. – John777

+1

그는 R을 사용하고 있습니다.이 정보는 질문의 태그에 있습니다. –

2

매트릭스의 모든 요소를 ​​얻으려면. 다음과 같은 것 :

#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) 
+0

여기에있는 키 중 하나는 'sd'가 열을 쌓아서 벡터처럼'm [, c (x, y)]를 처리한다는 것입니다. 행렬을 "풀다"(어떤 비유가 가장 잘 작동하는지). – shadowtalker

관련 문제