当前位置:  开发笔记 > 编程语言 > 正文

在python中矢量化一个二维函数

如何解决《在python中矢量化一个二维函数》经验,为你挑选了1个好方法。

我有一个Python函数f,它接受一对数字并返回计算结果,比方说, x+y

def f(x,y):
          return x+y

如何进行矢量化f,因此对于给定的矢量X =(x1,...,xn)和Y =(y1,...,yn)

f_vectorized(X,Y)返回f(x1,y1),f(x2,y2)...的数组?

编辑

上面,x + y是一个例子,但实际计算更复杂,因此通过考虑x和y,numpy向量不一定是开箱即用的.



1> Anton Protop..:

怎么样使用numpy作为输入?

import numpy as np

def f(x,y):
     return x+y

a = np.array([0,1,2,3])
b = np.array([1,2,3,4])

In [430]: f(a,b)
Out[430]: array([1, 3, 5, 7])

编辑

对于更复杂的功能,您可以使用list comprehension and zip:

In [451]: [f(*par) for par in  zip(a, b)]
Out[451]: [1, 3, 5, 7]

EDIT2

或者您可以np.vectorize像评论中提到的那样使用:

f_vec = np.vectorize(f)

In [470]: f_vec([0, 1, 2, 3], [1, 2, 3, 4])
Out[470]: array([1, 3, 5, 7])

性能:

In [471]: %timeit f_vec([0, 1, 2, 3], [1, 2, 3, 4])
10000 loops, best of 3: 38.3 µs per loop

In [472]: %timeit [f(*par) for par in  zip([0, 1, 2, 3], [1, 2, 3, 4])]
1000000 loops, best of 3: 1.8 µs per loop

In [476]: %timeit list(map(f, [0, 1, 2, 3], [1, 2, 3, 4]))
1000000 loops, best of 3: 1.51 µs per loop

因此,如果您对性能感兴趣,您应该使用zip并列出map@tglaria建议的理解或解决方案

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有