繁体   English   中英

用numpy进行数组广播

[英]Array broadcasting with 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中,它称为数组广播 ,而不是隐式循环。 在数组上广播标量运算的函数称为通用函数或ufunc。 许多基本的Numpy函数都是这种类型的。

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

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

当然,如果需要,可以调用kl_ufunc kl而不是kl_ufunc ,但是kl的原始定义将丢失。 这可能对您有用。

这里有一个视频系列,您可能会觉得有用:

http://showmedo.com/videotutorials/video?name=10370070&fromSeriesID=1037

请注意,这是讨论一系列numpy主题的教程系列的一部分。

仅供参考。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM