2016-10-06 2 views
1

이 질문에 관련 적용 : Multiply multidimensional array with same-sized matrixR 배열 출력은 차원

나는 다음과 같은 배열 및 매트릭스 작성하는 경우 :

a <- array(1, dim=c(2,2,3)) 
b <- matrix(c(1,1,1,1), nrow=2) 

a의 각 슬라이스 b의 elementwise 곱셈을 carray 싶습니다 3 차원을 따라 이동하면 apply을 사용합니다. 그러나 다음과 같은 이상한 결과가 나타납니다.

> dim(apply(a, 3, `*`, b)) 
[1] 4 3 
> newa <- array(0, dim=c(2,2,3)) 
> newa[] <- apply(a, 3, `*`, b) 
> dim(newa) 
[1] 2 2 3 

왜이 두 가지 답변이 다른가요?

답변

0

이 문서에 따르면, ?apply보기 때문에 apply(a, 3, * , b)의 생성 치수 4 3이다 FUN 각 호출 길이 n의 벡터를 반환하면

을 다음 apply는 치수 c(n, dim(X)[MARGIN]) 배열 n > 1을 경우를 반환 . 이 경우

FUN를 호출 할 때마다 길이 4의 벡터와 MARGIN=33이다와 치수를 돌려줍니다. FUN의 각 호출 결과가 apply 인 경우 vector이 아닌 matrix으로 강제 변환됩니다.

이제 newa[] <- array(...을 사용하여 newa 개체의 값을 array 값으로 바꿉니다. newa의 특성은 변경되지 않았으므로 치수는 여전히 2 2 3입니다.

희망이 도움이됩니다.