2014-07-21 5 views
0

하나는 2 진수이고 다른 하나는 정량적입니다. 목록의 순서가 중요합니다. 같은 크기의 중첩 된 행렬의 수와 동일한 수의 새로운 목록을 만드는 동안 이진 행렬을 정 성적으로 매핑하는 것이 좋습니다. 이 행렬은 정 성적 대응 물의 부분 집합입니다. 여기서 이진 행렬에 1이있다.부분 집합 행렬 : 행렬 차원을 그대로 유지하면서 2 진 행렬을 1의 질적 행렬에 매핑하지만 0이 아닌 행렬

# dummy data 

dat1 <- c(0,1,0,1,1,0,0,0,1,0,0,0,1,1,0,1) 
mat1 <- matrix(dat1, ncol=4, nrow=4, byrow=T) 

dat2 <- c(1,1,0,1,0,0,1,1,0,1,0,1,0,1,0,0) 
mat2 <- matrix(dat1, ncol=4, nrow=4, byrow=T) 

lsMat1 <- list(mat1, mat2) 

dat3 <- c(0.3,0.1,0.6,0.3,0.9,0.1,0.1,0.3,0.6,0.2,0.7,0.8,0.4,0.1,0.4,0.5) 
mat3 <- matrix(dat3, ncol=4, nrow=4, byrow=T) 

dat4 <- c(0.5,0.3,0.6,0.8,0.1,0.4,0.5,0.1,0.5,0.1,0.0,0.1,0.4,0.6,0.0,0.8) 
mat4 <- matrix(dat4, ncol=4, nrow=4, byrow=T) 

lsMat2 <- list(mat3, mat4) 

모든 포인터는 매우 극명하게 될 것이다

[[1]] 
    [,1] [,2] [,3] [,4] 
[1,] 0.0 0.1 0 0.3 
[2,] 0.9 0.0 0 0.0 
[3,] 0.6 0.0 0 0.0 
[4,] 0.4 0.1 0 0.5 

[[2]] 
    [,1] [,2] [,3] [,4] 
[1,] 0.0 0.3 0 0.8 
[2,] 0.1 0.0 0 0.0 
[3,] 0.5 0.0 0 0.0 
[4,] 0.4 0.6 0 0.8 

원하는 새로운 중첩 된 목록, 감사합니다!

+0

원하는 "새"목록이 위에 입력 한 테스트 데이터의 올바른 값입니까? 귀하의 정의에 따라 정확하지 않은 것으로 보입니다. – MrFlick

+0

논평을위한 환호. 그래, 그건 생각 이었어.하지만 내가 손으로 그 일을했기 때문에 내가 실수를했을 가능성이있다. 나는 그것을 점검하고 바로 잡을 것이다. –

답변

2

위에서 제공 한 출력이 올바르지 않다고 가정합니다. 이진 행렬에 0과 1이 있으므로 1의 값만 유지하려는 경우 단순한 요소 곱하기를 사용할 수 있습니다. 당신은 lsMat1 두 행렬의 해당 열에 세 주어진

[[1]] 
    [,1] [,2] [,3] [,4] 
[1,] 0.0 0.1 0 0.3 
[2,] 0.9 0.0 0 0.0 
[3,] 0.6 0.0 0 0.0 
[4,] 0.4 0.1 0 0.5 

[[2]] 
    [,1] [,2] [,3] [,4] 
[1,] 0.0 0.3 0 0.8 
[2,] 0.1 0.0 0 0.0 
[3,] 0.5 0.0 0 0.0 
[4,] 0.4 0.6 0 0.8 

모두 0 인 반환이 더 정확한 것 같다

Map(`*`, lsMat1, lsMat2) 

으로 목록의 각 항목에 대해 그렇게 할 수 있습니다.

+0

고마워요, 내가 찾던 것을 정확하게. 내보기에 오타를해서 죄송합니다. –

0

만약 내가 요소 - 와이즈 매트릭스 곱셈을 할 질문을 이해했다. 당신이 게시 된 구문하지만 MATLAB IN 익숙하지 임 :.

MAT1 * mat3는

이제 진 매트릭스에 제로 모든 요소가 0있을 것, 그리고 하나있는 모든 귀하의 정성의 값이됩니다 매트릭스.

희망이 있습니다.

+0

R 태그를 놓쳤습니다. -_- –