首页 > 解决方案 > 如何将一维维度数组输入 numpy.random.randn?

问题描述

假设我有一个一维数组dims

dims = np.array((1,2,3,4))

我想创建一个 n 阶正态分布张量,其中 n 是 的大小,dims并且dims[i]是第 i 维的大小。

我试着做

A = np.random.randn(dims)

但这不起作用。我可以

A = np.random.randn(1,2,3,4)

这会起作用,但n可能很大并且n本身可能是随机的。在这种情况下,如何读取尺寸大小的数组?

标签: pythonarraysnumpyrandom

解决方案


当签名为时,解包是标准 Pythonrandn(d0, d1, ..., dn)

In [174]: A = np.random.randn(*dims)
In [175]: A.shape
Out[175]: (1, 2, 3, 4)

randndocs 建议standard_normal使用元组(或可以视为元组的数组):

In [176]: B = np.random.standard_normal(dims)
In [177]: B.shape
Out[177]: (1, 2, 3, 4)

事实上,文档说新代码应该使用这个:

In [180]: rgn = np.random.default_rng()
In [181]: rgn.randn
Traceback (most recent call last):
  File "<ipython-input-181-b8e8c46209d0>", line 1, in <module>
    rgn.randn
AttributeError: 'numpy.random._generator.Generator' object has no attribute 'randn'

In [182]: rgn.standard_normal(dims).shape
Out[182]: (1, 2, 3, 4)

推荐阅读