是否有内置的方法或函数来映射numpy.ndarray上的函数?

时间:2015-05-19 15:45:01

标签: python numpy

我想将函数应用于numpy.ndarray的每个元素,如下所示:

import numpy
import math

a = numpy.arange(10).reshape(2,5)
b = map(math.sin, a)
print b

但这给出了:

TypeError: only length-1 arrays can be converted to Python scalars

我知道我可以这样做:

import numpy
import math
a = numpy.arange(10).reshape(2,5)

def recursive_map(function, value):
    if isinstance(value, (list, numpy.ndarray)):
        out = numpy.array(map(lambda x: recursive_map(function, x), value))
    else:
        out = function(value)
    return out
c = recursive_map(math.sin, a)
print c

我的问题是:是否有内置函数或方法来执行此操作?它似乎很简单,但我找不到它。我正在使用Python 2.7

1 个答案:

答案 0 :(得分:5)

使用np.sin它已经在ndarray上以元素方式工作。

您还可以重塑为1D数组,本机map应该可以正常工作。然后,您可以再次使用重塑来恢复原始尺寸。

您还可以使用np.vectorize编写可以像np.sin一样工作的函数。