矩阵和向量的逐元素乘积

3

不同于通常的矩阵乘法,我需要一种逐元素操作。以下内容可以正常运行:

# this works
Bmat <- structure(c(3L, 3L, 10L, 3L, 4L, 10L, 5L, 8L, 8L, 8L, 3L, 8L, 8L, 2L, 6L, 10L, 2L, 8L, 3L, 9L), .Dim = c(10L, 2L))
yvec <- c(2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
Bmat * yvec
#       [,1] [,2]
#  [1,]    6    6
#  [2,]    6   16
#  [3,]   20   16
#  [4,]    6    4
#  [5,]    8   12
#  [6,]   20   20
#  [7,]   10    4
#  [8,]   16   16
#  [9,]   16    6
# [10,]   16   18

然而,以下操作失败:
# this fails
Amat <- structure(c(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0), .Dim = c(10L, 2L))
xvec <- structure(c(1.83475682418716, 1.48154883122634, 1, 1, 1, 1, 1, 1, 1, 1), .Dim = c(10L, 1L))
Amat * xvec
#Fehler in Amat * xvec : nicht passende Arrays

为什么会出现这种情况呢?是因为Bmat是整数矩阵吗?我该怎么使第二段代码工作呢?


2
Amat * as.numeric(xvec) - David Heckmann
@(d.b, David Heckmann):你们两个的解决方案都可以,谢谢! - Karsten W.
1个回答

2
class(xvec)
[1] "matrix"

dim(xvec)
[1] 10  1

class(Amat)
[1] "matrix"    

dim(Amat)
[1] 10  2

两个矩阵的逐元素乘法仅在它们具有相同维度时才可能。因此,解决方案是将xvec转换为向量。请尝试。

Amat * c(xvec)
#OR
Amat * as.vector(xvec)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接