加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – np.multiply如何工作?

发布时间:2020-12-20 11:47:45 所属栏目:Python 来源:网络整理
导读:我试图在 Java中实现np.multiply,我对它实际上在做什么很困惑.文档简单地说它是元素乘法.它与我能找到的任何数学矩阵产品都不匹配.它部分匹配元素方面的Hadamard产品,但不需要相同数量的行和列.有谁知道什么数学产品np.multiply执行,并有任何更多的信息到它
我试图在 Java中实现np.multiply,我对它实际上在做什么很困惑.文档简单地说它是元素乘法.它与我能找到的任何数学矩阵产品都不匹配.它部分匹配元素方面的Hadamard产品,但不需要相同数量的行和列.有谁知道什么数学产品np.multiply执行,并有任何更多的信息到它是如何工作的?

以下是我得到的不同产出.这些似乎是非常不同的功能.

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

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

解决方法

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

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

您有一个对象数组(列表),因为所有子列表的长度不同.

>>> a = np.array([[1,3]])
>>> a
array([[1,3]],dtype=object)

因此,当你将它们相乘时,你将一个列表乘以一个整数 – 这就是你得到的结果.

例如如果c = np.multiply(a,b),那么:

c[0] == [1,1] * 2
c[1] == [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,3],[1,3]])
b = np.array([3,1])
c = np.array([[3,[3,1]])

在这种情况下,a * b和a * c将给出相同的结果.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读