代码之家  ›  专栏  ›  技术社区  ›  Neil G

numpy阵列广播

  •  2
  • Neil G  · 技术社区  · 15 年前

    如何使用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
    
    2 回复  |  直到 14 年前
        1
  •  5
  •   David Z    15 年前

    你所问的功能只存在于Numpy中,它被称为 array broadcasting

    你可以用 numpy.frompyfunc kl 变成一个乌夫纳。

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

    当然,如果你愿意,你可以打电话给ufunc 吉隆坡 kl_ufunc ,但是 就会迷失方向。那对你来说可能没问题。

        2
  •  1
  •   reckoner    15 年前

    这里有一个视频系列,您可能会发现它很有用:

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

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