将默认值设置为 numpy 数组

Set default value as numpy array

我有一个 class 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,我会得到 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 默认为具有特定 class 定义长度的随机数组。

根据经验,任何东西和 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]