我有两个3D阵列:
a=array(1:27, dim=c(3,3,3))
b=array(c(0,2,6,0), dim=c(3,3,3))
我希望总结阵列a中沿z维度(获得2D矩阵)的所有值,其中阵列b中对应的x,y,z位置处的值> 0
我更喜欢应用(最好使用标准功能)和if语句(如
)的组合summed=apply(a, c(1,2), sum {if(b[b>0])})
虽然给了我语法错误。我在这里想念什么?
答案 0 :(得分:0)
我们可以成倍增加'通过' b'的逻辑数组。通过乘以' a'通过二进制数组' b',那些在' b'中为0的元素。将成为0' a'和1 *号仍为数字
a* (b > 0)
然后,我们将数组转换为aperm
并获取colSums
colSums(aperm(a * (b > 0), c(3, 1, 2)))
# [,1] [,2] [,3]
#[1,] 10 26 16
#[2,] 22 14 34
#[3,] 12 30 18