如何使用 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/