我正在尝试执行以下操作:
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
返回此处记录的错误:
https://github.com/pydata/numexpr/wiki/Numexpr-Users-Guide#supported-reduction-operations
我想知道是否有一个我没想到的解决方法。
修改
回答一些意见:
这是一个比我感兴趣的实际例子更简单的例子。这里有一个更完整的例子:
How to sum of squares of sum with memory limitations?
在这里:
How to do a sum of sums of the square of sum of sums?
我不希望你读完这些问题。
我对numexpr
实现感兴趣的主要原因是,与我见过的任何其他内容相比,它为多线程提供了简单的支持,并且减少运算符减少了对内存存储的需求在我的情况下至关重要。
我希望这可以解决一些问题。
答案 0 :(得分:0)
如何使用两个表达式?
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
我不确定这是否适合您,但这样可以避免在numexpr中使用函数/总和。
答案 1 :(得分: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)')})