将默认值设置为 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]
我有一个 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]