将形状元组传递给Numpy`random.rand`

时间:2017-04-24 12:00:49

标签: python numpy random

我正在使用np.random.rand来创建所需形状的矩阵/张量。但是,此形状参数(在运行时生成)是一个元组,如:(2,3,4)。我们如何在shape中使用此np.random.rand

执行np.random.rand(shape)无效并会出现以下错误:

TypeError: 'tuple' object cannot be interpreted as an index

3 个答案:

答案 0 :(得分:16)

您可以使用shape解压缩*元组,例如

>>> shape = (2,3,4)
>>> np.random.rand(*shape)
array([[[ 0.20116981,  0.74217953,  0.52646679,  0.11531305],
        [ 0.03015026,  0.3853678 ,  0.60093178,  0.20432243],
        [ 0.66351518,  0.45499515,  0.7978615 ,  0.92803441]],

       [[ 0.92058567,  0.27187654,  0.84221945,  0.19088589],
        [ 0.83938788,  0.53997298,  0.45754298,  0.36799766],
        [ 0.35040683,  0.62268483,  0.66754818,  0.34045979]]])

答案 1 :(得分:7)

你也可以使用np.random.random_sample()接受shape作为元组,并且也从均匀分布的同一半开区间[0.0, 1.0)中抽取。

In [458]: shape = (2,3,4)

In [459]: np.random.random_sample(shape)
Out[459]: 
array([[[ 0.94734999,  0.33773542,  0.58815246,  0.97300734],
        [ 0.36936276,  0.03852621,  0.46652389,  0.01034777],
        [ 0.81489707,  0.1233162 ,  0.94959208,  0.80185651]],

       [[ 0.08508461,  0.1331979 ,  0.03519763,  0.529272  ],
        [ 0.89670103,  0.7133721 ,  0.93304961,  0.58961471],
        [ 0.27882714,  0.39493349,  0.73535478,  0.65071109]]])

事实上,如果您看到有关np.random.rand的NumPy说明,则说明:

  

这是一项便利功能。如果你想要一个接口   将一个shape-tuple作为第一个参数,参考   np.random.random_sample

答案 2 :(得分:2)

意识到这是参数解包的情况,因此需要使用*运算符。这是最小的工作示例。

import numpy as np
shape = (2, 3, 4)
H = np.random.rand(*shape)

以下StackOverflow answer详细介绍了明星运营商的工作情况。