gpt4 book ai didi

python - numpy.einsum 的输出形状

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

是否有一种优雅的方法可以根据 einsum 的输入参数预先计算 np.einsum 结果的形状(无需运行计算)?

# Given a, b and signature with 
# a.shape == (1, 2, 5)
# b.shape == (4, 5)
einsum_shape('ijk,mk->ik', a, b) # returns (1, 5)

最佳答案

以下内容适用于一般数量的输入和相关的 einsum 表达式,也适用于特定的标量缩减情况 -

def einsum_outshape(einsum_expr, inputs):
shps = np.concatenate([in_.shape for in_ in inputs])
p = einsum_expr.split(',')
s = p[:-1] + p[-1].split('->')
if s[-1]=='':
return ()
else:
inop = list(map(list,s))
return tuple(shps[(np.concatenate(inop[:-1])[:,None]==inop[-1]).argmax(0)])

示例运行 -

In [42]: a = np.random.rand(1,2,5)
...: b = np.random.rand(4,5)
...: c = np.random.rand(5,7,8)
...: d = np.random.rand(7,9)

In [43]: einsum_outshape('ijk,mk,kpq,pr->ikpqr', inputs=(a,b,c,d))
Out[43]: (1, 5, 7, 8, 9)

# Reduction to a scalar
In [44]: einsum_outshape('ijk,mk,kpq,pr->', inputs=(a,b,c,d))
Out[44]: ()

关于python - numpy.einsum 的输出形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58380445/

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