为了账号安全,请及时绑定邮箱和手机立即绑定

将点积应用于 3D 数组中的所有列

将点积应用于 3D 数组中的所有列

jeck猫 2021-12-29 19:54:36
我有一个 3D 数组,我需要在一个方向上进行转换。我有一个矩阵map_y,其中包含我使用np.dot. 是否可以避免for下面代码中的嵌套循环?import numpy as npnx, ny, nz = 64, 32, 24nyc = 11a = np.random.rand(nz, ny, nx)ac = np.empty((nz, nyc, nx))map_y = np.random.rand(nyc, ny)# Can we do this in a single numpy function?for k in range(nz):    for i in range(nx):        ac[k,:,i] = np.dot(map_y, a[k,:,i])
查看完整描述

1 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

使用np.einsum-


ac = np.einsum('ijk,lj->ilk',a,map_y)

einsum关于这个问题的一些解释:


轴可以被认为是示意性的,就像这样 -


a      : i      x j x k

map_y  :     l  x j

output : i x l      x k

因此,j对输出进行了对齐和总和减少,而其余部分是“spear-out”,为我们提供了所需的输出。


有关更多信息,请参阅链接的文档。


此外,通过将optimize标志np.einsum设置为True使用 BLAS 来处理标志。


查看完整回答
反对 回复 2021-12-29
  • 1 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信