2017-10-20 144 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])