如何解决Numpy不会为点积抛出FloatingPointError
我正在获取两个numpy数组(均为float32
)的点积。我故意将numpy设置为在溢出的情况下引发FloatingPointError
。但是,dot
的行为不符合预期:FloatingPointError
不会像使用普通乘法那样提高dot
,而是返回inf
。
这是预期的行为吗?有没有办法强制dot
引发异常?
最小工作示例:
import numpy as np
np.seterr(over="raise")
x = np.array([2e+38],dtype=np.float32)
y = np.array([10],dtype=np.float32)
x * y
>>> FloatingPointError: overflow encountered in multiply
np.dot(x,y)
>>> inf
解决方法
接受@hpaulj的评论作为答案– matmul
确实会按要求抛出FloatingPointError
,而dot
不会(不知道为什么)。出于我的目的,matmul
得到的结果与dot
相同。
正常*
乘积和np.dot
之间的差是:
numpy.dot
乘法:
numpy.dot
乘法表示正常的矩阵乘法,要乘以2个矩阵,则需要将第一个矩阵的第一行与第二个矩阵的第一列相乘。
当第一个矩阵的行和第二个矩阵的列不相等时,会产生错误。
*
乘法
*
所做的基本上是乘法,但是它以完全不同的方式来做。
它使用逐元素乘法。a[i] [j]上的元素将与b [i] [j]上的元素相乘。
Click on the link: You'll understand it better
答案
Overflow
出现在您将更多数据推入数据结构时无法容纳的情况。数组不能包含无限值。
但是在矩阵乘法中,发生的是2个数组的矩阵乘法给出一个整数。整数在保持无穷大方面没有问题,因此不会出现任何错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。