Python 是否可以在numexpr中对多个轴求和?
我正在尝试做如下事情:Python 是否可以在numexpr中对多个轴求和?,python,arrays,numpy,numexpr,Python,Arrays,Numpy,Numexpr,我正在尝试做如下事情: import numexpr as ne a = np.random.rand(10, 1) b = np.random.rand(1, 10) ne.NumExpr('sum(sum(a*b, 1), 0)').run(a, b) # <- error: reduction operations must occur last ne.NumExpr('sum(a*b, [1, 0])').run(a, b) # <- error: ValueError:
import numexpr as ne
a = np.random.rand(10, 1)
b = np.random.rand(1, 10)
ne.NumExpr('sum(sum(a*b, 1), 0)').run(a, b) # <- error: reduction operations must occur last
ne.NumExpr('sum(a*b, [1, 0])').run(a, b) # <- error: ValueError: cannot encode axis
将numexpr导入为ne
a=np.rand.rand(10,1)
b=np.rand.rand(1,10)
NumExpr('sum(sum(a*b,1),0)')。运行(a,b)#使用两个表达式怎么样
import numpy as np
import numexpr as ne
a = np.random.rand(10, 1)
b = np.random.rand(1, 10)
ab = ne.evaluate('sum(a*b, 0)') # Calculates sum over first axis
print ne.evaluate('sum(ab, 0)') # <- Calculates sum over summed axis
将numpy导入为np
将numexpr作为ne导入
a=np.rand.rand(10,1)
b=np.rand.rand(1,10)
ab=ne.evaluate('sum(a*b,0)#计算第一个轴上的总和
打印ne.evaluate('sum(ab,0)#您可以使用numexpr在多个轴上求和,如下所示:
import numpy as np
import numexpr as ne
a = np.random.rand(10, 1)
b = np.random.rand(1, 10)
ne.evaluate('sum(x, 0)', {'x': ne.evaluate('sum(a*b, 1)')})
你当然可以改变乘法的结果,但我怀疑它会比两个轴上的np.sum快。但如果你能更详细地解释你想要什么,也许可以重写你的计算。什么意义上的重塑?我觉得这样的解决方案会增加内存需求。类似于(a*b)。重塑(a.shape[0]*b.shape[1])。sum()。这取决于你真正的目标是什么。你也可以通过下列方法得到同样的结果:np.sum(a)*np.sum(b)。这对numexpr问题没有多大帮助,但另一方面,它做了你想要的。我编辑了这个问题,也许是为了解决这个问题的动机。我为你的原始问题添加了一个答案。这个解决方案的问题是,ab
必须存储在内存中,这在我的情况下并不总是可能的。