python – 在numpy.einsum中对省略号广播维度求和
发布时间:2020-12-16 22:51:43 所属栏目: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 subscripts given
在numpy中,我有一个可以是2-D或3-D的数组,我想将它减少到2-D,同时对每个元素求平方.所以我尝试了这个并不起作用:
它返回此错误:
我想einsum并不认为当省略号在右侧消失时,我想要省略省略号(如果它们存在).是否有一些“优雅”的方式(即没有检查维数和使用if语句)告诉它我想为3-D做这个:
这对于2-D?
最佳答案
有时处理变量维度的“优雅”方法是使用一组if测试,并在函数调用中隐藏它们.以np.atleast_3d为例;它有一个4路if / else子句.我在这里推荐它,除了它在最后添加额外的维度,而不是开始.如果使用重塑的条款不贵(时间明智),所以不要害怕使用它们.即使你发现了一些神奇的功能,看看它的代码;你可能会对隐藏的东西感到惊讶.
省略号用于“骑行”的尺寸,而不是您想要特定控制的尺寸.在这里,您要总结初始维度,因此您需要明确地对其进行索引:
对于2D阵列:
我认为你不能用一个表达式处理这两种情况. 获得第一笔金额的另一种方法
我提供了修复省略号处理的补丁,但那是几年前的事.所以细节在我的脑海里并不是很新鲜.作为其中的一部分,我反向设计解析字符串表达式(原始编译),并且可以查看该代码(或引用您),如果我们需要更明确的答案.
错误消息说它正在尝试将…维度传递给输出,而不能 – 因为输出缺少维度或….换句话说,它不会对…维度执行求和.它们传递给输出不变(适用广播规则). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |