您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 在numpy.einsum中对省略号广播维度求和

5b51 2022/1/14 8:22:02 python 字数 3580 阅读 584 来源 www.jb51.cc/python

在numpy中,我有一个可以是2-D或3-D的数组,我想将它减少到2-D,同时对每个元素求平方.所以我尝试了这个并不起作用:A = np.random.rand(5, 3, 3) np.einsum('...ij,...ij->ij', A, A) 它返回此错误:ValueError: output has more dimensions than s

概述

在numpy中,我有一个可以是2-D或3-D的数组,我想将它减少到2-D,同时对每个元素求平方.所以我尝试了这个并不起作用:

A = np.random.rand(5,3,3)
np.einsum('...ij,...ij->ij',A,A)

它返回此错误

ValueError: output has more dimensions than subscripts given in einstein sum,but no '...' ellipsis provided to broadcast the extra dimensions.

我想einsum并不认为当省略号在右侧消失时,我想要省略省略号(如果它们存在).是否有一些“优雅”的方式(即没有检查维数和使用if语句)告诉它我想为3-D做这个:

A = np.random.rand(5,3)
np.einsum('aij,aij->ij',A)

这对于2-D?

A = np.random.rand(3,3)
np.einsum('ij,ij->ij',A)

省略号用于“骑行”的尺寸,而不是您想要特定控制的尺寸.在这里,您要总结初始维度,因此您需要明确地对其进行索引:

In [161]: np.einsum('i...,i...',A)
Out[161]: 
array([[ 1.26942035,1.32052776,1.74118617],[ 1.59679765,1.49331565,2.04573002],[ 2.29027005,1.48351522,1.36679208]])
In [162]: np.einsum('aij,A)
Out[162]: 
array([[ 1.26942035,1.36679208]])

对于2D阵列:

In [165]: np.einsum('ij,A[0],A[0])
Out[165]: 
array([[ 0.20497776,0.11632197,0.65396968],[ 0.0529767,0.24723351,0.27559647],[ 0.62806525,0.33081124,0.57070406]])
In [166]: A[0]*A[0]
Out[166]: 
array([[ 0.20497776,0.57070406]])
In [167]: 
In [167]: np.einsum('...,...',A[0])
Out[167]: 
array([[ 0.20497776,0.57070406]])

我认为你不能用一个表达式处理这两种情况.

获得第一笔金额的另一种方法

In [168]: (A*A).sum(axis=0)
Out[168]: 
array([[ 1.26942035,1.36679208]])

我提供了修复省略号处理的补丁,但那是几年前的事.所以细节在我的脑海里并不是很新鲜.作为其中的一部分,我反向设计解析字符串表达式(原始编译),并且可以查看该代码(或引用您),如果我们需要更明确的答案.

In [172]: np.einsum('...ij,A)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)

  

错误消息说它正在尝试将…维度传递给输出,而不能 – 因为输出缺少维度或….换句话说,它不会对…维度执行求和.它们传递给输出不变(适用广播规则).

总结

以上是编程之家为你收集整理的python – 在numpy.einsum中对省略号广播维度求和全部内容,希望文章能够帮你解决python – 在numpy.einsum中对省略号广播维度求和所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶