python - 使用二维数组的内部求和调用函数

标签 python arrays numpy vectorization

假设我有一个 python 函数 f(),它接受 2 个标量和 1 个类似数组的参数:

def f(a, b, arr):
    X = a * np.exp(-arr**2 / b)
    return np.sum(a * np.log(X) - arr)

我想要做的是评估 f() 对于 a 和 b 的不同值,同时保持相同的 arr:

XX, YY = np.meshgrid(A_axis, B_axis)
arr = np.arange(10)
ZZ = np.empty_like(XX)
for i in range(XX.shape[0]):
    for j in range(YY.shape[1]):
        ZZ[i,j] = f(XX[i,j], YY[i,j], arr)

有没有办法对其进行矢量化?我正在考虑将 XX、YY 和 arr 转换为相同形状的 3D 数组,但 f() 中的 np.sum() 将始终返回标量。

最佳答案

  1. 通过np.ix_()从 xaxis、yaxis、arr 数据构建开放网格

  2. 使用 axis=-1 调用 np.sum()

这是代码:

import numpy as np

### original code
def f(a, b, arr):
    X = a * np.exp(-arr**2 / b)
    return np.sum(a * np.log(X) - arr)

A_axis = np.linspace(1, 5, 8)
B_axis = np.linspace(1, 2, 9)
XX, YY = np.meshgrid(A_axis, B_axis)
arr = np.arange(10)
ZZ = np.empty_like(XX)
for i in range(XX.shape[0]):
    for j in range(YY.shape[1]):
        ZZ[i,j] = f(XX[i,j], YY[i,j], arr)

### use broadcast        
def f(a, b, arr):
    X = a * np.exp(-arr**2 / b)
    return np.sum(a * np.log(X) - arr, axis=-1)
B, A, C = np.ix_(B_axis, A_axis, arr)
result = f(A, B, C)

print np.allclose(ZZ, result)

关于python - 使用二维数组的内部求和调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17872722/

相关文章:

python - Docker如何仅在发生更改时运行pip requirements.txt?

Python - 多处理的奇怪行为 - 连接不执行

php - 正则表达式散列和冒号

ios - 根据字符串名称数组过滤 Person 对象数组的有效方法

python - numpy:将由 nans 分隔的一维 block 数组拆分为 block 列表

python - 列表(numpy.array)缓慢的原因是什么?

Python:返回多个值的 C++ 扩展

python - sublime.py 在哪里?

java - 打印数组平均值和最高值

Python numpy 数组操作