制作一个由 1x3 随机数数组组成的 NxN 数组 (python)

Make a NxN array of 1x3 arrays of random numbers (python)

有没有办法制作一个 NxN 数组(所以是二维数组)的元素,其中每个元素都是一个由 3 个数字组成的数组,这些数字在 0 和 1 之间随机选择?

输出应如下所示:

(0.2,0.45,0.98), (0.7,0.58,0.11) ...
(1.0,0.05,0.63, ...
.
.
.

等等

我一直在尝试这样做,但一定有更优雅的方法。代码如下:

import numpy as  np
import matplotlib.pyplot as plt

lat = []

for _ in range(2):

        w = []

        for _ in range(2):
                a = np.random.uniform(0.0,1.0)
                b = np.random.uniform(0.0,1.0)
                c = np.random.uniform(0.0,1.0)

                D = np.array([a,b,c])

                w.append(D)

        lat.append(w)

        if _ >= 1:
                np.hstack(lat)

您可以使用 numpy.random.rand,其中第一个参数是您要生成的行数,然后第二个参数可以是 3 在您的情况下每一行。

>>> import numpy as np
>>> np.random.rand(10,3)
array([[ 0.80325895,  0.70250496,  0.4256057 ],
       [ 0.28863352,  0.14066084,  0.08918333],
       [ 0.52669678,  0.07641594,  0.92869148],
       [ 0.40105226,  0.88909989,  0.25459293],
       [ 0.8202674 ,  0.34435551,  0.49131868],
       [ 0.14251546,  0.51029693,  0.54037975],
       [ 0.07118544,  0.95467079,  0.87722367],
       [ 0.33530285,  0.64395738,  0.8289817 ],
       [ 0.5461907 ,  0.93165573,  0.73256816],
       [ 0.31204938,  0.38230589,  0.49739997]])

您可以使用 numpy.reshape 重塑随机生成的数字。

>>> N = 3
>>> np.random.rand(N*N*3).reshape([N,N,3])
array([[[ 0.48513983,  0.49582462,  0.96211702],
        [ 0.95061997,  0.63674441,  0.51228963],
        [ 0.06988701,  0.9018317 ,  0.63418989]],

       [[ 0.31213247,  0.75325276,  0.04600117],
        [ 0.23449785,  0.04731562,  0.89007085],
        [ 0.25746369,  0.96337201,  0.6032985 ]],

       [[ 0.2207508 ,  0.43560328,  0.75067189],
        [ 0.84054857,  0.28190793,  0.08875157],
        [ 0.00419059,  0.13464854,  0.63074635]]])

结果是一个由 3 个数字组成的二维数组。

>>> temp = np.random.rand(N*N*3).reshape([N,N,3])
>>> temp[0][0]
array([ 0.48513983,  0.49582462,  0.96211702])