让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 }}
答案 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