如何在python中计算外部函数?

时间:2017-08-03 23:30:11

标签: python numpy

如果我有像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)]

3 个答案:

答案 0 :(得分:2)

只要你确保以正确广播的方式编写你的功能,你就可以做到

f(x_arr[:, None], y_arr)

将其应用于两个一维数组x_arry_arr中的所有元素对。

例如,要以广播方式编写示例函数,请将其写为

def func(x, y):
    return np.cos(x) + np.sin(y) + x*y

np.cosnp.sin+*跨数组进行广播和向量化。

至于它是否播出?好吧,有些人可能会建议np.vectorize,但是你需要记住很多棘手的事情,比如保持一致的输出dtype而不是副作用。如果您的功能没有广播,我建议您只使用列表推导:

np.array([[f(xval, yval) for yval in y_arr] for xval in x_arr])

答案 1 :(得分:0)

解决此问题的一种方法是广播:

import numpy as np

def func(x, y):
    x, y = np.asarray(x)[:, None], np.asarray(y)
    return np.cos(x) + np.sin(y) + x*y

[:, None]为数组添加了另一个维度,因此会触发NumPys broadcasting

>>> func([1,2], [3,4])
array([[ 3.68142231,  3.78349981],
       [ 5.72497317,  6.82705067]])

答案 2 :(得分:0)

您可以使用嵌套循环执行此操作。在一个数组中使用单个元素,遍历另一个数组中的所有元素,然后继续执行第一个数组中的下一个元素并重复。

如果您只想打印结果,这将很简单,如果您想将结果存储到另一个数组中,这仍然有效,它只使用了大量资源。