numpy用户功能的广播

时间:2018-09-21 04:11:44

标签: python python-3.x numpy

numpy中,如果a是一个ndarray,则类似 np.sin(a)占ndarray所有条目的sin。如果我需要定义自己的具有广播行为的函数(对于一个愚蠢的例子,f(x) = sin(x) if x<1 else cos(x))怎么办?

2 个答案:

答案 0 :(得分:2)

您可以定义自己的函数f = lambda x: sin(x) if x<1 else cos(x),然后使用numpy的内置矢量化器f_broadcasting = np.vectorize(f)

这不会提高任何速度(并且额外的开销可能会减慢小问题),但是它为您提供了所需的广播行为。

答案 1 :(得分:2)

使用np.where

np.where(a<1,np.cos(a), np.sin(a))

示例:

a = [-1,1,2,-2]

>>> np.where(a<1,np.cos(a), np.sin(a))
array([-0.84147098,  0.84147098,  0.90929743, -0.90929743])

如果您有多个条件,请使用np.select