如何使用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])
Run Code Online (Sandbox Code Playgroud)
我想做点什么
z = kl(x, y)
Run Code Online (Sandbox Code Playgroud)
但这给了:
TypeError: only length-1 arrays can be converted to Python scalars
Run Code Online (Sandbox Code Playgroud)
您询问的功能仅存在于Numpy中,它称为阵列广播,而不是隐式循环.在数组上广播标量操作的函数称为通用函数或ufunc.许多基本的Numpy函数都属于这种类型.
您可以使用numpy.frompyfunc将现有函数kl转换为ufunc.
kl_ufunc = numpy.frompyfunc(kl, 4, 1)
...
z = kl_ufunc(x + 1.0, y + 1.0, myA, myB)
Run Code Online (Sandbox Code Playgroud)
当然,如果你愿意,你可以调用ufunc kl代替kl_ufunc,但是原来的定义kl会丢失.这对你的目的可能没问题.