我正在转录一个从R程序到python的多层感知器算法,但是我面临一个问题,矩阵乘法给了我一个不同的结果:
R语言:
> hidden <- matrix(c(-0.4442772, -0.1844143, 0.2783537, 0.2599441, -0.3190043, 0.2062185), nrow=2, ncol=3)
> Xp <- c(0, 1, 1)
> hidden %*% Xp
[,1]
[1,] -0.0406506
[2,] 0.4661626Python:
>>> import numpy as np
>>> Xp = np.array([0, 1, 1])
>>> hidden = np.asmatrix([[-0.4442772, -0.1844143, 0.2783537], [0.2599441, -0.3190043, 0.2062185]])
>>> np.dot(hidden, nq)
matrix([[ 0.0939394, -0.1127858]])使用沃尔夫勒姆,Python是正确的,但即使它没有收敛到算法的正确结果。我寻找这两种语言在这方面的不同之处,但一无所获。此外,我还使用了另一个矩阵乘法来测试,结果是相等的:
R语言:
> m1 <- matrix(c(2,3,4,7,0,1), nrow = 3, ncol=2)
> m2 <- matrix(c(1,6,4,3,6,9), nrow = 2, ncol=3)
> m1 %*% m2
[,1] [,2] [,3]
[1,] 44 29 75
[2,] 3 12 18
[3,] 10 19 33Python:
>>> import numpy as np
>>> m1 = np.matrix([[2,7], [3,0], [4,1]])
>>> m2 = np.matrix([[1,4,6], [6,3,9]])
>>> np.dot(m1,m2)
matrix([[44, 29, 75],
[ 3, 12, 18],
[10, 19, 33]])这个案子有什么区别?我如何在Python中达到这个结果呢?
发布于 2018-06-01 06:39:31
我建议你打印你创建的矩阵:
# [,1] [,2] [,3]
#[1,] -0.4442772 0.2783537 -0.3190043
#[2,] -0.1844143 0.2599441 0.2062185这和你的Wolfram链接显示的不一样。
如果创建相同的矩阵,则得到与python和Mathematica相同的结果:
hidden <- matrix(c(-0.4442772, -0.1844143, 0.2783537, 0.2599441, -0.3190043, 0.2062185), nrow=2, ncol=3,
byrow = TRUE) #fill matrix by row instead of default by column
# [,1] [,2] [,3]
#[1,] -0.4442772 -0.1844143 0.2783537
#[2,] 0.2599441 -0.3190043 0.2062185
Xp <- c(0, 1, 1)
hidden %*% Xp
# [,1]
#[1,] 0.0939394
#[2,] -0.1127858https://stackoverflow.com/questions/50637376
复制相似问题