【问题标题】:Elegant Numpy Tensor product优雅的 Numpy 张量积
【发布时间】:2021-04-28 14:42:19
【问题描述】:

我需要在 numpy(或 pytorch)中对两个张量进行乘积:

我有

A = np.arange(1024).reshape(8,1,128)
B = np.arange(9216).reshape(8, 128, 9)

并且想要获得C,点积在A (axis=2) 的最后一个暗淡和B (axis=1) 的中间暗淡上求和。这应该有尺寸8x9。目前,我正在做:

C = np.zeros([8, 9])
for i in range(8):
    C[i,:] = np.matmul(A[i,:,:], B[i,:,:])

如何优雅地做到这一点?

我试过了:

np.tensordot(weights, features, axes=(2,1)).

但它返回8x1x8x9

【问题讨论】:

  • 您为当前正在执行的操作提供的代码不会计算 C。cam 是什么?它与C 有什么关系?
  • np.matmul(A, B) 应该产生 (8,1,9)
  • @AlexanderGuyer cam=C。我修好了。对不起。我想在 A 的昏暗 2 和 B 的昏暗 1 上获得点积。如果我忽略第一个轴,那不是矩阵积吗?

标签: python numpy pytorch numpy-einsum


【解决方案1】:

一种方法是使用numpy.einsum

C = np.einsum('ijk,ikl->il', A, B)

或者你可以使用broadcasted矩阵乘法。

C = (A @ B).squeeze(axis=1)
# equivalent: C = np.matmul(A, B).squeeze(axis=1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-07
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    相关资源
    最近更新 更多