2013-06-18 3 views
-2

내가 좋아 처음 매트릭스 호출 입술이 행렬에 다음R : 인덱스

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

나는 인덱스 (인덱스)의 행렬을 다음과 같이 : 결과 내가 원하는

 [,1] [,2] 
[1,] 2 3 
[2,] 7 9 

고해상도 행렬은 다음과 같이 수 :

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

내가 큰 매트릭스를 가지고, 그것은 인덱스를 통해 루프에 시간이 오래 걸립니다 매트릭스. 더 나은 접근 방법이 있다면 알려 주시기 바랍니다. 나는 mat [indexes,] <-1과 같은 것을하기를 바라고 있습니다. 그러나 이것은 원했던 것이 아닙니다.

답변

2

메인 매트릭스와 indexes이 지수의 행렬 인 경우 res 경우 :

이 도울 수는 :

idx <- do.call("c",apply(indexes,1,function(x){seq(x[1],x[2])})) 

res[idx,] <- 1 

타이밍에 관해서는, 최초의 큰 지표 매트릭스 작성 :

> set.seed(42) 
> indexes <- t(matrix(sort(sample(1:10000,1000)),2,500)) 
> head(indexes) 
    [,1] [,2] 
[1,] 3 4 
[2,] 14 16 
[3,] 23 33 
[4,] 40 63 
[5,] 67 74 
[6,] 79 83 

및 시간 :

> system.time(idx <- do.call("c",apply(indexes,1,function(x){seq(x[1],x[2])}))) user system elapsed 
    0.008 0.000 0.007 

> system.time(idx2 <- unlist(apply(indexes , 1 , FUN = function(x){ seq.int(x[1],x[2])}))) 
    user system elapsed 
    0.004 0.000 0.002 

두 번째 방법이 약간 빠르다는 것을 알 수 있습니다.

+0

은 8 행은 포함되어 있지 않습니다 내가 오해했던이 도움이 될 것입니다 이 경우에는 하나. mat [array (indexes),] <- 1이고 mat [indexes,] <- 1은 같다. – user1938809

+0

그러나 예제 색인 행렬에는 숫자 8 (2,3,7,9 만)이 표시되어 있습니다. – harkmug

+0

그게 문제의 요점입니다. 결과 행렬을 보면. 그것을 지 웁니다. 감사. – user1938809

0

편집 :

test <- matrix(rep(0,1E7), ncol=2) 
Index <- matrix(sort(sample(1:(1E7*0.5), size=10000)), ncol=2, byrow=TRUE) 
test[unlist(apply(Index, 1, function(x){x[1]:x[2]})),] <- 1 
+0

그래도 문제가 해결되지 않는다고 생각합니다. – user1938809

+0

@ user1938809 질문을 재 해석하고 내 대답을 적절히 편집했습니다. 이것이 옳지 않다면 어쩌면 문제를 분명히 할 수 있습니다. – rbatt

+0

먼저 오류가 발생합니다. 둘째로, 행 2 : 3과 7 : 9를 1로 설정하고 싶습니다. 한 번의 호출로 2,3,7,9 행을 1로 쉽게 설정합니다. 까다로운 부분은 인덱스 매트릭스가 res 매트릭스의 시작 및 끝 인덱스를 제공한다는 것입니다. 감사. – user1938809

0

은 행 인덱스 ridx의 벡터를 만들려면 previous question에 대한 답변을 사용하고

res[as.logical(ridx),] = 1L 
+0

그래, 그게 효과가 있지만 때로는 R 메모리가 부족합니다. 좀 더 솔직한 방법이 있다면 나는 기대하고 있었다. – user1938809

+0

@ user1938809 더 구체적으로 - ridx를 만들 때? 부분 집합 대체를하고 있니? 얼마나 많은 메모리가 있고 얼마나 큰 (object.size()) 객체입니까?위의 작업은 다른 솔루션에 비해 특히 메모리 집약적이어서는 안됩니다. –