python - 使用 numpy 进行数组广播

标签 python numpy

如何使用 Python 的隐式循环编写以下循环?

def kl(myA, myB, a, b):
    lots of stuff that assumes all inputs are scalars

x, y = meshgrid(inclusive_arange(0.0, xsize, 0.10),\
                inclusive_arange(0.0, ysize, 0.10))

for j in range(x.shape[0]):
    for i in range(x.shape[1]):
        z[j, i] = kl(x[j, i], y[j, i])

我想做类似的事情

z = kl(x, y)

但这给出了:

TypeError: only length-1 arrays can be converted to Python scalars

最佳答案

您所询问的功能仅存在于 Numpy 中,它的名称为 array broadcasting ,不是隐式循环。在数组上广播标量运算的函数称为通用函数,或 ufunc。许多基本的 Numpy 函数都是这种类型。

您可以使用numpy.frompyfunc将现有函数 kl 转换为 ufunc。

kl_ufunc = numpy.frompyfunc(kl, 4, 1)
...
z = kl_ufunc(x + 1.0, y + 1.0, myA, myB)

当然,如果你愿意,你可以调用 ufunc kl 而不是 kl_ufunc,但是 kl 的原始定义将是丢失的。这可能适合您的目的。

关于python - 使用 numpy 进行数组广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3443234/

相关文章:

python - 如何将 'google.cloud.documentai.v1beta2.types.document.Document' 转换为 JSON?

python - 如何提升最小化或被 PyGObject 覆盖的窗口?

python - 如何将当前日期时间写入 python 中的 csv 文件?

python - 将一个 numpy 数组与自身交错

python - numpy boolean 数组内存溢出

python - 两个读取和附加程序在同一个文本文件上给出无法识别的输出

python - 在Python中复制没有重复行和空行的文件

python:在函数内表现不佳的dict-错误的TypeError

python - numpy 数组索引器中的冒号、无、切片(无)

python - 如何批量拆分numpy数组?