gpt4 book ai didi

python - 3d 数组的 Numpy 元素乘积

转载 作者:太空狗 更新时间:2023-10-29 20:20:00 27 4
gpt4 key购买 nike

我有两个形状为 (N, 2, 2) 的 3d 数组 A 和 B,我想根据 N 轴逐元素乘以每个 2x2 矩阵上的矩阵乘积。通过循环实现,它看起来像

C[i] = dot(A[i], B[i])

有没有一种方法可以不使用循环来做到这一点?我研究过 tensordot,但没能让它发挥作用。我想我可能想要类似 tensordot(a, b, axes=([1,2], [2,1])) 的东西,但这给了我一个 NxN 矩阵。

最佳答案

您似乎正在沿第一个轴对每个切片进行矩阵乘法。同样,您可以使用 np.einsum像这样 -

np.einsum('ijk,ikl->ijl',A,B)

我们也可以使用np.matmul -

np.matmul(A,B)

在 Python 3.x 上,此 matmul 操作简化为 @ operator -

A @ B

基准测试

方法-

def einsum_based(A,B):
return np.einsum('ijk,ikl->ijl',A,B)

def matmul_based(A,B):
return np.matmul(A,B)

def forloop(A,B):
N = A.shape[0]
C = np.zeros((N,2,2))
for i in range(N):
C[i] = np.dot(A[i], B[i])
return C

时间 -

In [44]: N = 10000
...: A = np.random.rand(N,2,2)
...: B = np.random.rand(N,2,2)

In [45]: %timeit einsum_based(A,B)
...: %timeit matmul_based(A,B)
...: %timeit forloop(A,B)
100 loops, best of 3: 3.08 ms per loop
100 loops, best of 3: 3.04 ms per loop
100 loops, best of 3: 10.9 ms per loop

关于python - 3d 数组的 Numpy 元素乘积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31957364/

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