numpy.zeros和numpy.random.randn的不一致numpy参数的任何原因

Jer*_*hen 9 numpy

我正在使用numpy零和numpy.random.randn实现计算

W1 = np.random.randn(n_h, n_x) * .01
b1 = np.zeros((n_h, 1))
Run Code Online (Sandbox Code Playgroud)

我不确定为什么random.randn()可以接受两个整数,而zeros()需要一个元组.这有充分的理由吗?

干杯,JChen.

hpa*_*ulj 7

最有可能的只是历史问题. numpy几个先前的包合并的结果,并有很长的发展.一些怪癖得到了清理,其他人则保持原样.

randn(d0, d1, ..., dn)
zeros(shape, dtype=float, order='C')
Run Code Online (Sandbox Code Playgroud)

randn 有这个说明:

这是一个便利功能.如果您想要一个以元组作为第一个参数的接口,请numpy.random.standard_normal改用.

standard_normal(size=None)
Run Code Online (Sandbox Code Playgroud)

有了*它很容易得到一个元组传递到randn:

np.random.randn(*(1,2,3))
Run Code Online (Sandbox Code Playgroud)

np.zeros需要几个关键字参数.randn才不是.您可以使用(*args, **kwargs)签名定义Python函数.但接受一个元组,特别是一个常用的元组,shape更适合.但这是一个意见问题.

np.random.rand并且np.random.random_sample是另一对这样的.最有可能rand并且randn是旧版本,并standard_normalrandom_sample有较新的设计,以符合更常见的tuple风格.