Python 将默认值设置为numpy数组

Python 将默认值设置为numpy数组,python,arrays,numpy,default-value,Python,Arrays,Numpy,Default Value,我有一个类MyClass,它存储一个整数a。我想在其中定义一个函数,它采用长度为a的numpy数组x,但如果用户没有传入任何内容,我想将x设置为相同长度的随机数组。(如果他们传入了错误长度的值,我可能会出错)。基本上,我希望x默认为大小为a的随机数组 下面是我实现这一点的尝试 import numpy as np class MyClass(): def __init__(self, a): self.a = a def function(self, x = N

我有一个类MyClass,它存储一个整数
a
。我想在其中定义一个函数,它采用长度为a的numpy数组
x
,但如果用户没有传入任何内容,我想将
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
,则此操作有效。I get
ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()
即,numpy似乎不喜欢将数组与
None
进行比较

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


有没有一个好的蟒蛇式的方法来实现这一点?总之,我希望参数
x
默认为具有特定的、类定义长度的随机数组

根据经验,任何东西和
None
的比较都应该使用
is
而不是
=
来完成

将x==None时的
更改为x为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]

根据经验,任何东西和
None
的比较都应该使用
is
而不是
=
来完成

将x==None时的
更改为x为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]

这实际上是Python鼓励
使用is None
而不是
==None
的关键原因之一,然而每当人们回答关于“为什么我们应该使用is None”的问题时,我忘记了——我的意思是那些人忘记了,而是把注意力集中在最初的原因和各种不太重要的事情上……这实际上是Python鼓励
是无的
而不是
==None
,然而每当人们回答关于“为什么我们应该使用is-None”的问题时,我忘记了——我的意思是那些人忘记了,转而关注原始原因和各种不太重要的事情……错误是由对数组执行
==
测试引起的。这样的测试会生成一个大小相同的布尔数组。
如果[True,False,True,False]:
有意义吗?幸运的是,在这种情况下,
是无的
是正确的选择。错误是由对数组执行
=
测试引起的。这样的测试会生成一个大小相同的布尔数组。
如果[True,False,True,False]:
有意义吗?幸运的是,在这种情况下,
是无的
是正确的选择。