2016-11-22 6 views
1

최적화를 기반으로 행렬의 모든 값을 효율적으로 풀 수있는 코드를 작성하려고합니다.행렬의 모든 값 최적화

(x - (1/((1/x) - sqrt(1/x))))^2 

나는이 작업을 수행하는 코드를 작성하지만, 꽤 아니다 (도 아니다 빠르다) : 나는 방정식을 최소화 x의 값을 찾기 위해 노력하고있어.

mSS <- function(x) 
{ 
    #Sum of squares for X and the transformation 
    (x - (1/((1/test_mat[rows, cols]) - sqrt(1/x))))^2 
} 

n = 151 
m = 50000 
test_mat = matrix(rnorm(n * m, mean = 0, sd = 1), n, m) 
trans_mat = matrix(data = NA, n, m) 

#Go through each row/col position in array, find value that minimizes mSS function 
for (cols in 1:ncol(test_mat)) { 
    for (rows in 1:nrow(test_mat)) { 
    trans_mat[rows, cols] = optimize(mSS, c(0, 3))$minimum 
    } 
} 

저는이 작업을보다 빠르게 진행하기위한 최선의 방법을 찾기 위해 정신이 없습니다. 어쩌면 일부 사용자 지정 함수를 사용하여 응용 프로그램을 사용하는 것이 경로 일 수 있다고 생각했지만 실행 가능한 솔루션을 찾는 데 어려움을 겪고 있습니다. 올바른 방향으로 향한 어떤 포인터라도 감사 할 것입니다.

답변

2

이 시도 : ((x)는 {최적화, 2 상하 = 0, = 3, A =의 X를 F = MSS를 기능 :

mSS<-function(x, a) 
{ 
    #Sum of squares for X and the transformation 
    (x-(1/((1/a)-sqrt(1/x))))^2 
} 
y <- as.numeric(test_mat) 
ty <- sapply(y, function(x) optimize(mSS,c(0,3),a=x)$minimum) 
trans_mat <- matrix(ty, nrow=nrow(test_mat)) 
+0

또한 1,'적용 (test_mat 같은 뭔가를 할 수) $ minimum})'(똑같은 추론이나,'sapply'와'matrix' 대신에'apply'를 사용합니다. – etienne

+0

@ZheyuanLi : 참으로 방금 벤치 마크를했고,'sapply'는 더 빠릅니다 – etienne