문제

에 대해 알게 된 후 r에서 드문 매트릭스로 작업하기위한 옵션, 나는 사용하고 싶다 행렬 다음 데이터 프레임에서 드문 매트릭스를 생성하고 다른 모든 요소가있는 패키지 NA.

     s    r d
1 1089 3772 1
2 1109  190 1
3 1109 2460 1
4 1109 3071 2
5 1109 3618 1
6 1109   38 7

평소와 같이 요소에 액세스하는 다음과 같은 희소 행렬을 만들 수 있다는 것을 알고 있습니다.

> library(Matrix)
> Y <- sparseMatrix(s,r,x=d)
> Y[1089,3772]
[1] 1
> Y[1,1]
[1] 0

그러나 기본값이 NA가 되려면 다음을 시도했습니다.

  M <- Matrix(NA,max(s),max(r),sparse=TRUE)
  for (i in 1:nrow(X))
    M[s[i],r[i]] <- d[i]

이 오류가 발생했습니다

Error in checkSlotAssignment(object, name, value) : 
  assignment of an object of class "numeric" is not valid for slot "x" in an object of class "lgCMatrix"; is(value, "logical") is not TRUE

뿐만 아니라 요소에 액세스하는 데 훨씬 더 오래 걸린다는 것을 알았습니다.

> system.time(Y[3,3])
   user  system elapsed 
  0.000   0.000   0.003 
> system.time(M[3,3])
   user  system elapsed 
  0.660   0.032   0.995 

이 매트릭스를 어떻게 만들어야합니까? 하나의 매트릭스가 작업하기에 훨씬 느리게하는 이유는 무엇입니까?

위의 데이터에 대한 코드 스 니펫은 다음과 같습니다.

X <- structure(list(s = c(1089, 1109, 1109, 1109, 1109, 1109), r = c(3772, 
190, 2460, 3071, 3618, 38), d = c(1, 1, 1, 2, 1, 7)), .Names = c("s", 
"r", "d"), row.names = c(NA, 6L), class = "data.frame")
도움이 되었습니까?

해결책

예, Thierry의 대답은 확실히 사실입니다. 'Matrix'패키지의 공동 저자로 말할 수 있습니다 ...

다른 질문에 : 왜 "M"에 액세스하는 것이 "y"보다 느려지 는가? 주요 대답은 "M"은 "y"보다 훨씬 더 작다는 것입니다. 따라서 설상 된 크기와 플랫폼의 RAM에 따라 훨씬 작은 개체의 경우 액세스 시간이 더 빠릅니다. .

다른 팁

기본 NA 값을 원하십니까? 내가 아는 한 매트릭스는 세포가 제로가있는 경우에만 희소합니다. NA는 0이 아닌 값이므로 희소 행렬의 모든 이점을 잃어 버립니다. 매트릭스에 0이 거의없는 경우 클래식 매트릭스는 훨씬 더 효율적입니다. 클래식 매트릭스는 치수에 따라 절단 될 벡터와 같습니다. 따라서 데이터 벡터와 치수 만 저장하면됩니다. 스파스 매트릭스는 0이 아닌 값만 저장할뿐만 아니라 위치에도 저장합니다. 충분한 값이있는 경우에만 이점이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top