当前位置:  开发笔记 > 编程语言 > 正文

np.multiply如何工作?

如何解决《np.multiply如何工作?》经验,为你挑选了1个好方法。



1> mgilson..:

正如文档所说,它正在进行元素乘法.请注意,在您的第一个示例中,

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产品.什么时候他们的形状不一样?在这种情况下,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会给出相同的结果.


显然,我描述它的方式不是它的实现方式(这将是非常低效的),但它有助于作为一种思考方式.



正如另外一点,当使用numpy数组时,*运算符将始终产生与multiply()相同的输出.如果你想使用元素乘法,那么只需要使用numpy或scipy矩阵(与numpy数组不同)时,才需要使用multiply()函数.
推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有