天天看點

Numpy 修煉之道 (13)—— 将python函數向量化

推薦閱讀時間:4min~5min

文章内容: 使用Numpy将python函數向量化

想要實作将python函數向量化,Numpy中的vectorize 和frompyfunc函數都可以滿足要求。

vectorize 函數

Numpy的 vectorize 函數能夠實作将普通的python函數轉化成具有向量化的功能。簡單來說就是,如果一個python函數隻能對單個元素進行某種處理操作,經過vectorize 轉化之後,能夠實作對一個數組進行處理。

>>> add_one([1, 2, 3])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in add_one
TypeError: can only concatenate list (not "int") to list
>>> vadd_one = np.vectorize(add_one)
>>> vadd_one([1, 2, 3])
array([2, 3, 4])           

複制

需要注意的是,vectorize函數主要作用是提供便利,而不是性能。它的實作本質上是for循環。

更詳細的内容請參見:

https://docs.scipy.org/doc/numpy1.13.0/reference/generated/numpy.vectorize.html

frompyfunc 函數

frompyfunc 函數可以實作類似的功能,不過它需要指定輸入參數的個數與傳回結果的個數。

>>> uadd_one = np.frompyfunc(add_one, 1, 1)
>>> uadd_one([1, 2, 3])
array([2, 3, 4], dtype=object)           

複制

更詳細的内容請參見:

https://docs.scipy.org/doc/numpy1.13.0/reference/generated/numpy.frompyfunc.html#numpy.frompyfunc

作者:無邪,個人部落格:腦洞大開,專注于機器學習研究。