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/

相关文章:

arrays - 查找 2 个巨大数组之间的变化

python - AttributeError: 'numpy.ndarray' 对象没有属性 'units'

python - 替换n维numpy数组中特定轴索引的元素

python - 为什么这个Python逻辑索引占用这么多内存

Python - 如何在 os.replace 中使用相对路径?

python - 更改绘图上的轴值

python - cursor.fetchall() 的打印结果没有尾随 'L'

python - 如何让 Sublime Text 在 Windows 上读取 PYTHONPATH 环境变量

python - scipy.stats.norm 密度函数未积分为 1

c - 为什么数组不从最后一个数字插入的地方继续?