2017-10-20 114 views
2

有没有办法让一个NxN数组(所以2d数组)的元素,其中每个元素是一个3个数字在0和1之间随机选择的数组?做一个NxN数组的1x3随机数组(python)

输出应该是这个样子:

(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) 

回答

1

你可以在你的情况下为每一行使用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]]) 
+0

所以,如果我使用: np.random.rand(3,3,3) 这给了我,我的问题,但与三个要素进入第三个维度所以它就像一个数据描述的矩阵立方体。 谢谢CoryKramer! – user8188120

1

您可以使用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])