python - 在许多点计算许多单项式

标签 python arrays numpy

以下问题涉及在许多点上评估许多单项式 (x**k * y**l * z**m)。

我想计算两个 numpy 数组的“内在力量”,即,

import numpy

a = numpy.random.rand(10, 3)
b = numpy.random.rand(3, 5)

out = numpy.ones((10, 5))
for i in range(10):
    for j in range(5):
        for k in range(3):
            out[i, j] *= a[i, k]**b[k, j]

print(out.shape)

如果相反,该行将显示为

out[i, j] += a[i, k]*b[j, k]

这将是一些内积,可以用简单的einsum计算。

是否可以在一个 numpy 行中执行上述循环?

最佳答案

用对数来考虑它怎么样:

import numpy

a = numpy.random.rand(10, 3)
b = numpy.random.rand(3, 5)

out = np.exp(np.matmul(np.log(a), b))

因为c_ij = prod(a_ik ** b_kj, k=1..K),所以log(c_ij) = sum(log(a_ik) * b_ik, k=1。 .K).

注意:a 中有零 可能 会弄乱结果(也可能是负数,但无论如何结果都无法很好地定义)。我已经试过了,但它似乎并没有以某种方式真正崩溃;我不知道 NumPy 是否保证这种行为,但为了安全起见,您可以在末尾添加一些内容,例如:

out[np.logical_or.reduce(a < eps, axis=1)] = 0

关于python - 在许多点计算许多单项式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45420399/

相关文章:

Python长乘法

arrays - 如何生成多个数组的所有排列/组合?

arrays - GraphQL 循环遍历数组并获取所有结果

python - 在 numpy 中对分区索引分组 argmax/argmin

python - Numpy python R 等效索引

Python:从文本数据中剥离 html

python - 禁止在 matplotlib 绘图中显示坐标

python - 如何确定文件是否为只读

JavaScript .push 不工作

python - 将 np 字符串数组中的每个元素与其他元素进行比较的最快方法