本文最后更新于 602 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com
向量化函数
自定义的 sinc 函数:
import numpy as np
def sinc(x):
    if x == 0.0:
        return 1.0
    else:
        w = np.pi * x
        return np.sin(w) / w作用于单个数值:
sinc(0.0)1.0sinc(3.0)3.8981718325193755e-17但这个函数不能作用于数组:
x = np.array([1,2,3])
sinc(x)---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
 in ()
      1 x = np.array([1,2,3])
----> 2 sinc(x)
 in sinc(x)
      2 
      3 def sinc(x):
----> 4     if x == 0.0:
      5         return 1.0
      6     else:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()   可以使用 numpy 的 vectorize 将函数 sinc 向量化,产生一个新的函数:
vsinc = np.vectorize(sinc)
vsinc(x)array([  3.89817183e-17,  -3.89817183e-17,   3.89817183e-17])其作用是为 x 中的每一个值调用 sinc 函数:
import matplotlib.pyplot as plt
%matplotlib inline
x = np.linspace(-5,5,101)
plt.plot(x, vsinc(x))[] 

因为这样的用法涉及大量的函数调用,因此,向量化函数的效率并不高。