将默认值设置为numpy数组

时间:2018-03-20 15:45:26

标签: python arrays numpy default-value

我有一个MyClass类,它存储一个整数a。我想在其中定义一个带有长度为x的numpy数组a的函数,但我希望如果用户没有传入任何内容,x被设置为随机数组长度相同。 (如果他们传入错误长度的值,我可以提出错误)。基本上,我希望x默认为大小为a的随机数组。

以下是我尝试实施此

的尝试
import numpy as np 
class MyClass():
    def __init__(self, a):
        self.a = a
    def function(self, x = None):
        if x == None:
            x = np.random.rand(self.a)
        # do some more functiony stuff with x

如果没有传入任何内容,则此方法有效,但如果传递x,我会ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all(),即看起来numpy不喜欢将数组与None进行比较。

定义内联默认值不起作用,因为self尚未在范围内。

有没有一种不错的pythonic方法来实现这一目标?总而言之,我希望参数x默认为特定的类定义长度的随机数组。

1 个答案:

答案 0 :(得分:3)

根据经验,任何事项和None的比较都应该使用is而不是==进行。

if x == None更改为if x is None可解决此问题。

class MyClass():
    def __init__(self, a):
        self.a = a

    def function(self, x=None, y=None):
        if x is None:
            x = np.random.rand(self.a)
        print(x)

MyClass(2).function(np.array([1, 2]))
MyClass(2).function()
#  [1 2]
#  [ 0.92032119  0.71054885]