【发布时间】:2011-07-09 00:47:03
【问题描述】:
假设我们有一个特别简单的函数,比如
import scipy as sp
def func(x, y):
return x + y
这个函数显然适用于 x 和 y 的几种内置 python 数据类型,如 string、list、int、float、array 等。由于我们对数组特别感兴趣,我们考虑两个数组:
x = sp.array([-2, -1, 0, 1, 2])
y = sp.array([-2, -1, 0, 1, 2])
xx = x[:, sp.newaxis]
yy = y[sp.newaxis, :]
>>> func(xx, yy)
返回
array([[-4, -3, -2, -1, 0],
[-3, -2, -1, 0, 1],
[-2, -1, 0, 1, 2],
[-1, 0, 1, 2, 3],
[ 0, 1, 2, 3, 4]])
正如我们所期望的那样。
现在,如果想将数组作为以下函数的输入,该怎么办?
def func2(x, y):
if x > y:
return x + y
else:
return x - y
执行>>>func(xx, yy) 会引发错误。
第一个显而易见的方法是 scipy/numpy 中的 sp.vectorize 函数。然而,这种方法已被证明不是很有效。谁能想到一种更强大的方式将任何函数广播到 numpy 数组?
如果以数组友好的方式重写代码是唯一的方法,那么如果您也可以在此处提及它会有所帮助。
【问题讨论】: