栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

圆点对对称乘法太聪明

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

圆点对对称乘法太聪明

此行为是在请求请求#6932中为NumPy
1.11.0引入的更改的结果。从1.11.0的发行说明中:

以前,gem BLAS操作用于所有基质产品。现在,如果矩阵乘积介于矩阵及其转置之间,它将使用syrk
BLAS操作来提高性能。此优化已扩展到@,numpy.dot,numpy.inner和numpy.matmul。

在该PR的更改中,可以找到以下评论:

因此,NumPy正在对矩阵情况乘以其转置进行一次显式检查,并在这种情况下调用另一个基础BLAS函数。正如@hpaulj在评论中指出的那样,这种检查对于NumPy来说是便宜的,因为转置的2d数组只是原始数组上的视图,具有倒置的形状和跨度,因此只需检查数组中的一些元数据即可(而不是必须比较实际的数组数据)。

这是一个略有差异的案例。注意,

.copy
在其中一个参数上使用a
dot
足以击败NumPy的特殊情况。

import numpy as nprandom = np.random.RandomState(12345)A = random.uniform(size=(10, 5))Sym1 = A.dot(A.T)Sym2 = A.dot(A.T.copy())print(abs(Sym1 - Sym2).max())

我猜想,这种特殊情况的优点是,除了明显的提速潜力外,还可以确保(我希望,但实际上,这将取决于BLAS的实现),从而在出现以下情况时获得完全对称的结果:

syrk
而不是仅根据数值误差对称的矩阵。作为对此(当然不是很好)的测试,我尝试了:

import numpy as nprandom = np.random.RandomState(12345)A = random.uniform(size=(100, 50))Sym1 = A.dot(A.T)Sym2 = A.dot(A.T.copy())print("Sym1 symmetric: ", (Sym1 == Sym1.T).all())print("Sym2 symmetric: ", (Sym2 == Sym2.T).all())

我的机器上的结果:

Sym1 symmetric:  TrueSym2 symmetric:  False


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/645066.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号