03.14 向量化函数
向量化函数
自定义的 sinc 函数:
1import numpy as np
2
3def sinc(x):
4 if x == 0.0:
5 return 1.0
6 else:
7 w = np.pi * x
8 return np.sin(w) / w
作用于单个数值:
1sinc(0.0)
1.0
1sinc(3.0)
3.8981718325193755e-17
但这个函数不能作用于数组:
1x = np.array([1,2,3])
2sinc(x)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-4-9d4f36f2aa7a> in <module>()
1 x = np.array([1,2,3])
----> 2 sinc(x)
<ipython-input-1-dffe464e3332> 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 向量化,产生一个新的函数:
1vsinc = np.vectorize(sinc)
2vsinc(x)
array([ 3.89817183e-17, -3.89817183e-17, 3.89817183e-17])
其作用是为 x 中的每一个值调用 sinc 函数:
1import matplotlib.pyplot as plt
2%matplotlib inline
3
4x = np.linspace(-5,5,101)
5plt.plot(x, vsinc(x))
[<matplotlib.lines.Line2D at 0xa24e4e0>]
因为这样的用法涉及大量的函数调用,因此,向量化函数的效率并不高。