在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矩阵做类似的事情吗?我只是希望数组的每个子矩阵在元素上与矩阵相乘。
答案 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]
。