gpt4 book ai didi

python - np.multiply 如何工作?

转载 作者:行者123 更新时间:2023-12-04 21:59:55 33 4
gpt4 key购买 nike

我正在尝试在 Java 中实现 np.multiply 并且我对它实际在做什么感到困惑。该文档只是说明它进行元素乘法。它与我能找到的任何数学矩阵乘积都不匹配。它部分匹配元素方式的 Hadamard 乘积,但不需要相同数量的行和列。有谁知道 np.multiply 执行什么数学产品,并且有更多关于它是如何工作的信息?

这是我得到的不同输出。这些看起来非常不同的功能。

a = np.array([[1,1,1],[2,2,2],[2,3]])
b = np.array([[2,3,4]])
print(np.multiply(a,b))
#output
[[1, 1, 1, 1, 1, 1] [2, 2, 2, 2, 2, 2, 2, 2, 2] [2, 3, 2, 3, 2, 3, 2, 3]]]



a = np.array([[1,1,1],[2,2,2]])
b = np.array([[2,3,4]])
print(np.multiply(a,b))
#output
[[2 3 4]
[4 6 8]]

最佳答案

就像文档所说的那样,它正在进行元素乘法。注意,在你的第一个例子中,

a = np.array([[1,1,1],[2,2,2],[2,3]])
b = np.array([[2,3,4]])

您有一个对象数组(列表),因为所有子列表的长度都不相同。
>>> a = np.array([[1,1,1],[2,2,2],[2,3]])
>>> a
array([[1, 1, 1], [2, 2, 2], [2, 3]], dtype=object)

因此,当您将它们相乘时,就是将一个列表乘以一个整数——这就是您在结果中得到的。

例如如果 c = np.multiply(a, b) , 然后:
c[0] == [1, 1, 1] * 2
c[1] == [2, 2, 2] * 3
c[2] == [2, 3] * 4

到目前为止,我们看到相同形状的数组相乘会产生 Handamard product .当它们的形状不一样时呢?在这种情况下,numpy 尝试将它们“广播”为相同的形状。这些规则可能有些复杂,所以我不会尝试在此处重现它们,但可以在 http://docs.scipy.org/doc/numpy-1.10.1/user/basics.broadcasting.html 中找到它们。 .标量数组乘法的工作原理与数学中标量矩阵乘法的工作原理相同。对于形状不同的数组,尾随维数必须匹配,维数较少的数组会根据需要重复多次以填充缺失的维数,然后执行 Handamard 乘积。

例如
a = np.array([[1, 2, 3], [1, 2, 3]])
b = np.array([3, 2, 1])
c = np.array([[3, 2, 1], [3, 2, 1]])

在这种情况下, a * ba * c将给出相同的结果。

显然,我描述它的方式并不是它的实现方式(那会非常低效),但它作为一种思考方式很有帮助。

关于python - np.multiply 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34277386/

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