簡體   English   中英

用隨機數創建二維數組的簡單方法(Python)

[英]Simple way of creating a 2D array with random numbers (Python)

我知道在 Python 中創建一個充滿零的 NxN 數組的簡單方法是:

[[0]*N for x in range(N)]

但是,假設我想通過用隨機數填充數組來創建數組:

[[random.random()]*N for x in range(N)]

這不起作用,因為創建的每個隨機數都被復制了 N 次,所以我的數組沒有 NxN 唯一的隨機數。

有沒有辦法在一行中做到這一點,而不使用 for 循環?

您可以使用嵌套列表理解:

>>> N = 5
>>> import random
>>> [[random.random() for i in range(N)] for j in range(N)]
[[0.9520388778975947, 0.29456222450756675, 0.33025941906885714, 0.6154639550493386, 0.11409250305307261], [0.6149070141685593, 0.3579148659939374, 0.031188652624532298, 0.4607597656919963, 0.2523207155544883], [0.6372935479559158, 0.32063181293207754, 0.700897108426278, 0.822287873035571, 0.7721460935656276], [0.31035121801363097, 0.2691153671697625, 0.1185063432179293, 0.14822226436085928, 0.5490604341460457], [0.9650509333411779, 0.7795665950184245, 0.5778752066273084, 0.3868760955504583, 0.5364495147637446]]

或者使用numpy (非標准庫但非常流行):

>>> import numpy as np
>>> np.random.random((N,N))
array([[ 0.26045197,  0.66184973,  0.79957904,  0.82613958,  0.39644677],
       [ 0.09284838,  0.59098542,  0.13045167,  0.06170584,  0.01265676],
       [ 0.16456109,  0.87820099,  0.79891448,  0.02966868,  0.27810629],
       [ 0.03037986,  0.31481138,  0.06477025,  0.37205248,  0.59648463],
       [ 0.08084797,  0.10305354,  0.72488268,  0.30258304,  0.230913  ]])

(PS 當你的意思是list並為 numpy ndarray s 保留array時,養成說list的習慣是個好主意。實際上有一個內置的array模塊,它有自己的array類型,所以更容易混淆,但它相對很少使用。)

只需在列表理解中使用[random.random() for i in range(N)]

演示:

>>> import random
>>> N = 3
>>> [random.random() for i in range(N)]
[0.24578599816668256, 0.34567935734766164, 0.6482845150243465]
>>> M = 3
>>> [[random.random() for i in range(N)] for j in range(M)]
[[0.9883394519621589, 0.6533595743059281, 0.866522328922242], [0.5906410405671291,         0.4429977939796209, 0.9472377762689498], [0.6883677407216132,     0.8215813727822125, 0.9770711299473647]]

這是創建二維數組的方式:

k = np.random.random ([3,4]) * 10
k.astype(int)

您可以使用列表推導式。

[[random.random() for x in xrange(N)] for y in xrange(N)]

https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions

對於大型多維數組,我建議您使用 numpy。

它可以在沒有循環的情況下完成。 試試這行簡單的代碼,生成一個 2 x 3 的隨機數矩陣,均值為 0,標准差為 1。

語法是:

import numpy

numpy.random.normal(mean, standard deviation, (rows,columns))

例子 :

numpy.random.normal(0,1,(2,3))

使用 numpy 中的這個簡單函數:

用數字 1-4 填充的大小為 (4,4) 的數組

 np.random.randint(1, 5, size=(4, 4))


 [1 2 1 2]
 [2 2 2 4]
 [4 1 1 2]
 [4 2 2 4]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM