数组和矩阵之间的元素乘法

时间:2017-02-18 16:28:48

标签: arrays r matrix multiplication

在R中,我可以在矩阵和(共形)矢量之间进行分段乘法,例如:

X <- matrix(c(1, 2, 3, 4), nrow = 2)
a <- c(0, 1)
X * a

然后将矩阵的每一行与相应的向量元素相乘。我也可以对尺寸大于2的数组做同样的事情:

XX <- array(X, dim = c(2, 2, 2))
a <- c(0, 1)
XX * a

再次将每一行与相应的向量元素相乘。我可以为3d数组和2d矩阵做类似的事情吗?我只是希望数组的每个子矩阵在元素上与矩阵相乘。

2 个答案:

答案 0 :(得分:0)

你不能将它与2d矩阵相乘,但你可以试试这个 XX*c(1,2,3,4)

答案 1 :(得分:0)

通过首先从较小维矩阵构造适当的数组然后执行逐元素运算,可以实现&#39; - 逐步乘法(或任何算术运算)。在您的示例中:

X <- 1:8
XX <- array(X, dim = c(2, 2, 2))
a <- c(0, 1)

# construct array for point-wise operation
expandeda <- array(a, dim=dim(XX))

XX * expandeda

这样做的结果表明,正如你所说,a的各个元素是逐行应用的(即到数组的第一个维度):

, , 1

     [,1] [,2]
[1,]    0    0
[2,]    2    4

, , 2

     [,1] [,2]
[1,]    0    0
[2,]    6    8

使用array(a, dim=dim(XX))构建合适的数组并不适用于3d和2d矩阵,但对于任何数组的维度,只要length(a) == dim(XX)[1]