gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:06:00 25 4
gpt4 key购买 nike

我有一个 3D 数组,我需要将其沿一个方向进行转换。我有一个矩阵 map_y,其中包含我使用 np.dot 应用的一个方向的变换。是否可以避免下面代码中的嵌套 for 循环?

import numpy as np

nx, ny, nz = 64, 32, 24
nyc = 11

a = 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])

最佳答案

使用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 是对齐的,并且还对输出进行了求和,而其余部分则“speard-out”,为我们提供了所需的输出。

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

此外,还可以通过将 np.einsum 中的 optimize 标志设置为 True 来使用 BLAS。

关于python - 将点积应用于 3D 数组中的所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55528882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com