如果我有一个像 func(x,y) = cos(x) + sen(y) + x*y 这样的随机函数,如何将其应用于 2 个数组中的所有元素对?
我找到了https://docs.scipy.org/doc/numpy/reference/generated/numpy.outer.html和 发现所有基本操作都有外部函数。但是如果我想用自定义函数来实现呢?
假设 array1 是 [1,2],array2 是 [3,4],我想要应用的函数称为 f(float, float)
预期输出为
[f(1,3) f(1,4)
f(2,3) f(2,4)]
最佳答案
只要确保以正确广播的方式编写函数,就可以做到
func(x_arr[:, None], y_arr)
将其应用于两个一维数组x_arr
和y_arr
中的所有元素对。
例如,要以广播方式编写示例函数,您可以将其编写为
def func(x, y):
return np.cos(x) + np.sin(y) + x*y
因为 np.cos
、np.sin
、+
和 *
跨数组进行广播和矢量化。
至于不播吗?嗯,有些人可能会建议 np.vectorize
,但这有很多棘手的事情你必须记住,比如保持一致的输出 dtype
并且没有副作用。如果您的函数不广播,我建议仅使用列表推导式:
np.array([[func(xval, yval) for yval in y_arr] for xval in x_arr])
关于python - 如何计算Python中的外部函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45496096/