为什么这个代码关于矩阵乘法是错误的外部()命令

2022-01-30 14:57:17 标签 rmatrix
x <- matrix(c(1,2,3,4,5), 5, 5)
q <- x %*% t(x)
w <- outer(x, x)
all.equal(q, w)

我认为外部()函数在R意味着$x x^{T}$为什么all。equal(qw)不给TRUE?

这似乎有个误会。outer applies FUN to each tuple from适用于FUN to each 到每个元组x and y.和y. Wha. 您的外部调用有效计算的是(用FUN = `*` as default):

为默认):

x[1, 1] * x[1, 1]
x[2, 1] * x[1, 1]
...
x[5, 5] * x[5, 5]

也就是说,你将得到5 x 5 x 5 x 5个元素(即x和y的所有组合)。

正如帮助文件所述,生成的数组的维数为c(dim(x) dim(y)),在你的情况下为c(5 5 5 5)。所以外层的is不等于x %*% t(y)。

你可以通过下面这些行更好地看到这种行为:

x <- matrix(1:4, 2, 2)
y <- matrix(LETTERS[1:4], 2, 2)
outer(x, y, FUN = paste0)
# , , 1, 1
#
#      [,1] [,2]
# [1,] "1A" "3A"
# [2,] "2A" "4A"
#
# , , 2, 1
#
#      [,1] [,2]
# [1,] "1B" "3B"
# [2,] "2B" "4B"
# 
# , , 1, 2
#
#      [,1] [,2]
# [1,] "1C" "3C"
# [2,] "2C" "4C"
#
# , , 2, 2
# 
#      [,1] [,2]
# [1,] "1D" "3D"
# [2,] "2D" "4D"

我只能推测,但我可以想象这种误解来自于这样一个事实

i <- 1:4
j <- 1:3
all.equal(outer(i, j), matrix(i, 4, 1) %*% matrix(j, 1, 3))
# [1] TRUE

是相同的。但是我们要计算的是

( i[1] * j[1]   i[1] * j[2]   i[1] * j[3] )
( i[2] * j[1]   i[2] * j[2]   i[2] * j[3] )
( i[3] * j[1]   i[3] * j[2]   i[3] * j[3] )
( i[4] * j[1]   i[4] * j[2]   i[4] * j[3] )
阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码