减去R中的不同维数组

时间:2019-06-20 11:59:22

标签: arrays r

AB分别是维度为[2,3,4][100,2]的数组。请注意,2是通用尺寸。

我想要的答案是一个维度为C的数组[100,2,3,4],使得

C[h,i,j,k] = A[i,j,k] - B[h,i]

针对所有h,i,j,k

C[h,i,j,k] = A[i,j,k] + B[h,i]

针对所有h,i,j,k

使用以下示例数组,后一种情况更容易检查答案。


例如

    A <- array(NA,c(2,3,4))
    for (i in 1:2) {for(j in 1:3){for(k in 1:4){ 
A[i,j,k] <- i*1000000+j*100000+k*10000        
   }}}

    B <- array(NA,c(100,2))
    for (h in 1:100) {for(i in 1:2){B[h,i] <- h*10+i }} 

1 个答案:

答案 0 :(得分:1)

怎么样

C <- array(NA, c(dim(B)[1], dim(A)))
# Approach 1
for (h in 1 : dim(B)[1])
 for(i in 1 : dim(A)[1])
   C[h, i,, ] <-  A[i,, ] - B[h, i]

# Approach 2
for (h in 1 : dim(B)[1])  
 C[h,,,] <-  sweep(A, 1, B[h, ], "-")

要检查答案是否正确,请为h,i,j,k选择一些值

i <- 1; j <- 2; k <- 3; h <- 50

C[h, i, j, k]
#[1] 2338998

A[i,j,k] - B[h,i]
#[1] 2338998