正如标题所说,假设我想写一个符号函数(让我们暂时忘记 sign(0)),显然我们期望 sign(2) = 1 和 sign(array([-2,-2,2])) =数组([-1,-1,1])。但是,以下函数不起作用,因为它无法处理 numpy 数组。

def sign(x):
    if x>0: return 1
    else: return -1

下一个函数也不起作用,因为如果 x 只是一个数字,则它没有形状成员。即使使用了像 y = x*0 + 1 这样的技巧,y 也不会有 [] 方法。
def sign(x):
    y = ones(x.shape)
    y[x<0] = -1
    return y

即使有另一个问题(how can I make a numpy function that accepts a numpy array, an iterable, or a scalar?)的想法,当 x 是单个数字时,下一个函数也不起作用,因为在这种情况下 x.shape 和 y.shape 只是 () 并且索引 y 是非法的。
def sign(x):
    x = asarray(x)
    y = ones(x.shape)
    y[x<0] = -1
    return y

唯一的解决方案似乎是首先确定 x 是数组还是数字,但我想知道是否有更好的方法。如果你有很多这样的小函数,编写分支代码会很麻烦。

最佳答案

我想知道它是否是您想要的 向量化函数 :

>>> import numpy as NP

>>> def fnx(a):
        if a > 0:
            return 1
        else:
            return -1

>>> vfnx = NP.vectorize(fnx)

>>> a = NP.random.randint(1, 10, 5)
array([4, 9, 7, 9, 2])

>>> a0 = 7

>>> vfnx(a)
array([1, 1, 1, 1])

>>> vfnx(a0)
array(1)

关于python - 一个接受标量或 numpy 数组作为参数的 python 函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26542615/

10-14 14:49
查看更多