4

我正在尝试执行以下操作:

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

我想知道是否有我没有想到的解决方法。

编辑

回答一些评论:

这是一个比我感兴趣的实际示例更简单的示例。这里有一个更完整的示例:

如何在内存限制的情况下求和的平方和?

和这里:

如何求和的平方和的和?

我不希望你通读这些问题。

我对实现感兴趣的主要原因numexpr是,与我见过的其他任何东西相比,它为多线程提供了简单的支持,并且归约运算符减少了对内存存储的需求,这在我的情况下有时是至关重要的。

我希望这可以解决一些问题。

4

2 回答 2

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 中函数/总和的有限使用。

于 2014-12-16T10:24:19.823 回答
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)')})
于 2020-12-30T05:54:28.303 回答