gpt4 book ai didi

python - 当我使用元素乘法时,R 和 Python 之间的广播规则不同 (*)

转载 作者:行者123 更新时间:2023-12-03 08:10:51 25 4
gpt4 key购买 nike

我在 R 和 Python 中尝试了矩阵和向量的元素乘法 (*),并收到了不同的结果,如下所示。

这是 R:

#R input
a=matrix(c(1,2,3,4,5,6,7,8),byrow=T,nrow=4)
b=c(9,10)
print(a)
print(b)
print(a*b)

#R output
# a
[,1] [,2]
[1,] 1 2
[2,] 3 4
[3,] 5 6
[4,] 7 8
# b
[1] 9 10
# a*b
[,1] [,2]
[1,] 9 18
[2,] 30 40
[3,] 45 54
[4,] 70 80

这是Python:

#Python input
a=np.array([[1,2],[3,4],[5,6],[7,8]])
b=np.array([9,10])
print(a)
print(b)
print(a*b)

#Python output
# a
[[1 2]
[3 4]
[5 6]
[7 8]]
# b
[ 9 10]
# a*b
[[ 9 20]
[27 40]
[45 60]
[63 80]]

看来 R 和 Python 在执行 * 时对向量 b 的展开方式不同。 R 使用以下矩阵来逐个元素相乘:

     [,1] [,2]
[1,] 9 9
[2,] 10 10
[3,] 9 9
[4,] 10 10

虽然Python使用以下矩阵:

[[ 9 10]
[ 9 10]
[ 9 10]
[ 9 10]]

谁能解释一下为什么他们有不同的广播方式*? Python 是否有任何函数或运算符可以产生与 R 相同的结果?

谢谢!

最佳答案

R 代码使用 recycling rule ,这表示如果向量太短,它将根据需要重复多次以匹配其他操作数。 Python 代码使用 numpy broadcasting rules它描述了如果一个操作涉及不同形状的 numpy 数组会发生什么。这些规则不一样,因此你会得到不同的结果。

您可以通过多种方式使用 numpy 获得与 R 中相同的结果。例如:

a * np.tile(b, (1,2)).T 

它给出:

array([[ 9, 18],
[30, 40],
[45, 54],
[70, 80]])

关于python - 当我使用元素乘法时,R 和 Python 之间的广播规则不同 (*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70866779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com