跨越numpy矩阵的映射函数

Owe*_*683 3 python numpy python-3.x

有没有办法轻松地将函数映射到 numpy 数组中的每个值?我之前通过将其拆分为列表,使用列表理解并重新制作矩阵来完成它,但似乎必须有一种更简单的方法。

use*_*203 6

是的,你可以使用 np.vectorize()

>>> import numpy as np
>>> def myfunc(a, b):
...     if a > b:
...             return a - b
...     else:
...             return a + b
...
>>> vfunc = np.vectorize(myfunc)
>>> vfunc(np.array([[1,2,3],[1,2,3]]),2)
array([[3, 4, 1],
       [3, 4, 1]])
Run Code Online (Sandbox Code Playgroud)

在某些情况下,您不需要np.vectorize(),您只需使用 annp.array()作为参数即可调用该函数,如下所示:

>>> def add_one(x):
...     return x + 1
...
>>> add_one(np.array([1,2,3,4]))
array([2, 3, 4, 5])
>>>
Run Code Online (Sandbox Code Playgroud)

更多关于性能和使用的讨论可以在这里找到:

在 numpy 数组上映射函数的最有效方法