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

向量化3D数组的NumPy协方差

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

向量化3D数组的NumPy协方差

入侵

numpy.cov sourcepre
并尝试使用默认参数。事实证明,
np.cov(x[i,:,:])
将很简单:

N = x.shape[2]m = x[i,:,:]m -= np.sum(m, axis=1, keepdims=True) / Ncov = np.dot(m, m.T)  /(N - 1)

因此,任务是对这个循环进行矢量化处理,该循环将一次性遍历

i
并处理所有数据
x
。同样,我们可以
broadcasting
在第三步中使用。对于最后一步,我们将
sum-reduction
沿第一轴上的所有切片在此处执行。可以通过向量化方式有效地实现
np.einsum
。因此,最终的实现是这样的-

N = x.shape[2]m1 = x - x.sum(2,keepdims=1)/Ny_out = np.einsum('ijk,ilk->ijl',m1,m1) /(N - 1)

运行时测试

In [155]: def original_app(x):     ...:     n = x.shape[0]     ...:     y = np.zeros((n,2,2))     ...:     for i in np.arange(x.shape[0]):     ...:         y[i]=np.cov(x[i,:,:])     ...:     return y     ...:      ...: def proposed_app(x):     ...:     N = x.shape[2]     ...:     m1 = x - x.sum(2,keepdims=1)/N     ...:     out = np.einsum('ijk,ilk->ijl',m1,m1)  / (N - 1)     ...:     return out     ...:In [156]: # Setup inputs     ...: n = 10000     ...: x = np.random.rand(n,2,4)     ...:In [157]: np.allclose(original_app(x),proposed_app(x))Out[157]: True  # Results verifiedIn [158]: %timeit original_app(x)1 loops, best of 3: 610 ms per loopIn [159]: %timeit proposed_app(x)100 loops, best of 3: 6.32 ms per loop

巨大的加速!



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

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

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