我能否生成一个同时包含正数和负数的数组并指定这个数组的极限和维度

  • 本文关键字:数组 极限 包含正 一个 python numpy random
  • 更新时间 :
  • 英文 :


c=np.random.rand(10,2)[0,1)中生成随机数数组。我可以生成相同的数组(在大小方面),但与负数和正数?另外,我可以选择这个数组的极限和维度吗?例如,如果我想从-2到2。

使用np.random.randint,传递size参数。对于[-2, 2)和大小(10, 2)的值,您有:

In [32]: np.random.randint(-2, 2, (10, 2))
Out[32]:
array([[-1,  1],
       [-2,  0],
       [-1,  0],
       [-2, -2],
       [ 0, -2],
       [-2, -2],
       [ 0,  0],
       [ 1, -1],
       [ 0,  1],
       [-2, -1]])

或者使用np.random.uniform for float:

In [33]: size = (10, 2)
In [39]: np.random.uniform(-2, 2, size)
Out[39]:
array([[-1.1129566 , -1.94562947],
       [ 0.21356557, -1.96769933],
       [ 1.1481992 , -0.08494563],
       [ 0.12561175,  0.95580417],
       [-1.79335536, -1.01276994],
       [ 1.56808971,  0.15911181],
       [ 0.50987451, -1.39039728],
       [-1.57962641,  1.59555514],
       [-1.8318709 , -1.57055885],
       [ 0.682527  , -1.89022731]])

如果你不想从正态分布中生成统一的数字,你可以得到0到1之间的随机数,然后使用它来构建最小和最大之间的随机数。

(np.random.rand(30) * 10) - 5

上面将给出[-5,+5)之间的30个数字

虽然已经回答了,但我想再添加一个方法。您可以使用np.linspace在指定范围内生成等间距的浮点数,例如:

>>> nums = np.linspace(-2, 2, 10)
>>> nums
array([-2.        , -1.55555556, -1.11111111, -0.66666667, -0.22222222,
        0.22222222,  0.66666667,  1.11111111,  1.55555556,  2.        ])

如果需要,您可以将数组重塑为任何兼容的所需形状。

>>> nums.reshape(5, 2)
array([[-2.        , -1.55555556],
       [-1.11111111, -0.66666667],
       [-0.22222222,  0.22222222],
       [ 0.66666667,  1.11111111],
       [ 1.55555556,  2.        ]])