将数组的每个维度乘以不同的值
Multiply each dimension of an array by a different value
我有一个 3 维数组 (a),第 3 维的长度等于 2。
我还有一个长度为 2 的向量 (MU.A)。
> dx <- dy <- 0.25
> nx=ny=1/dx
> nz=2
> a <- array(rep(c(3,4,0,1),each=nx*ny/2), dim=c(nx,ny,nz))
> a
, , 1
[,1] [,2] [,3] [,4]
[1,] 3 3 4 4
[2,] 3 3 4 4
[3,] 3 3 4 4
[4,] 3 3 4 4
, , 2
[,1] [,2] [,3] [,4]
[1,] 0 0 1 1
[2,] 0 0 1 1
[3,] 0 0 1 1
[4,] 0 0 1 1
> MU.A=seq(from=0.2,to=0.8,by=0.6/(nz-1))
> MU.A
[1] 0.2 0.8
我想将 a[ , ,1] 乘以 MU.A[1] ; a[ , ,2] 通过 MU.A[2] ;如果我的物体更大,依此类推。
我找到了一种方法,但我不确定这是 best/fastest 方式:
> array(mapply('*',a,rep(MU.A,each=nx*ny)),dim=c(nx,ny,nz))
, , 1
[,1] [,2] [,3] [,4]
[1,] 0.6 0.6 0.8 0.8
[2,] 0.6 0.6 0.8 0.8
[3,] 0.6 0.6 0.8 0.8
[4,] 0.6 0.6 0.8 0.8
, , 2
[,1] [,2] [,3] [,4]
[1,] 0 0 0.8 0.8
[2,] 0 0 0.8 0.8
[3,] 0 0 0.8 0.8
[4,] 0 0 0.8 0.8
有最简单的方法吗?
可能最有效(这取决于问题的大小)的方法是使用向量回收。为此,您只需排列数组维度,使第三个维度成为第一个维度,相乘,然后将维度排列回去:
aperm(aperm(a, c(3, 1, 2)) * MU.A, c(2, 3, 1))
我有一个 3 维数组 (a),第 3 维的长度等于 2。 我还有一个长度为 2 的向量 (MU.A)。
> dx <- dy <- 0.25
> nx=ny=1/dx
> nz=2
> a <- array(rep(c(3,4,0,1),each=nx*ny/2), dim=c(nx,ny,nz))
> a
, , 1
[,1] [,2] [,3] [,4]
[1,] 3 3 4 4
[2,] 3 3 4 4
[3,] 3 3 4 4
[4,] 3 3 4 4
, , 2
[,1] [,2] [,3] [,4]
[1,] 0 0 1 1
[2,] 0 0 1 1
[3,] 0 0 1 1
[4,] 0 0 1 1
> MU.A=seq(from=0.2,to=0.8,by=0.6/(nz-1))
> MU.A
[1] 0.2 0.8
我想将 a[ , ,1] 乘以 MU.A[1] ; a[ , ,2] 通过 MU.A[2] ;如果我的物体更大,依此类推。 我找到了一种方法,但我不确定这是 best/fastest 方式:
> array(mapply('*',a,rep(MU.A,each=nx*ny)),dim=c(nx,ny,nz))
, , 1
[,1] [,2] [,3] [,4]
[1,] 0.6 0.6 0.8 0.8
[2,] 0.6 0.6 0.8 0.8
[3,] 0.6 0.6 0.8 0.8
[4,] 0.6 0.6 0.8 0.8
, , 2
[,1] [,2] [,3] [,4]
[1,] 0 0 0.8 0.8
[2,] 0 0 0.8 0.8
[3,] 0 0 0.8 0.8
[4,] 0 0 0.8 0.8
有最简单的方法吗?
可能最有效(这取决于问题的大小)的方法是使用向量回收。为此,您只需排列数组维度,使第三个维度成为第一个维度,相乘,然后将维度排列回去:
aperm(aperm(a, c(3, 1, 2)) * MU.A, c(2, 3, 1))