【问题标题】:How can I apply np.tensordot 'along an axis', e.g. one axis that indicates samples?我如何应用 np.tensordot '沿轴',例如一个表示样本的轴?
【发布时间】:2021-06-18 17:24:32
【问题描述】:

考虑两个多维数组,其中每个数组的第一个轴例如表示不同的样本,这样两个数组在该轴上具有相同的维度,我们希望在这些数组之间沿该维度应用 np.tensordot。

也就是说,我们要实现以下目标:

import numpy as np
a = np.random.normal(size=(10,2,4,5))
b = np.random.normal(size=(10,2))
out = np.zeros((10,4,5))

for i in range(10):
    out[i] = np.tensordot(b[i],a[i],axes=1)

但使用 numpy 操作/索引。

有没有聪明的方法来做到这一点(也有不同的维度,这些只是例子)

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    我认为einsum 功能可以帮助您解决这个问题

    import numpy as np
    a = np.random.normal(size=(10,2,4,5))
    b = np.random.normal(size=(10,2))
    out = np.zeros((10,4,5))
    
    for i in range(10):
        out[i] = np.tensordot(b[i],a[i],axes=1)
    
    out1 = np.einsum('ijkl,ij->ikl', a, b)
    
    (out1 == out).all()
    

    输出:

    True
    

    【讨论】:

    • 我认为 tensordot 和 einsum 可以做同样的事情,但事实并非如此
    猜你喜欢
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 2019-04-12
    • 2022-09-22
    • 1970-01-01
    相关资源
    最近更新 更多