【问题标题】:Array broadcasting with numpy使用 numpy 进行数组广播
【发布时间】:2010-08-09 18:56:49
【问题描述】:

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

【问题讨论】:

  • “隐式循环”?你能定义一下吗?
  • 我想我的意思是“阵列广播”:)

标签: python numpy


【解决方案1】:

您询问的功能仅存在于 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 的原始定义。这可能适合您的目的。

【讨论】:

    【解决方案2】:

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

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

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

    仅供参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      • 2012-06-26
      相关资源
      最近更新 更多