首页 > 解决方案 > 减去R中的不同维度数组

问题描述

A和分别B是维数[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 }} 

标签: arraysr

解决方案


这个怎么样

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

推荐阅读