使用随机数创建二维数组的简单方法(Python)
Posted
技术标签:
【中文标题】使用随机数创建二维数组的简单方法(Python)【英文标题】:Simple way of creating a 2D array with random numbers (Python) 【发布时间】:2014-07-29 07:02:15 【问题描述】:我知道在 Python 中创建一个全零的 NxN 数组的简单方法是:
[[0]*N for x in range(N)]
但是,假设我想通过填充随机数来创建数组:
[[random.random()]*N for x in range(N)]
这不起作用,因为创建的每个随机数都会被复制 N 次,所以我的数组没有 NxN 唯一的随机数。
有没有办法在一行中做到这一点,而不使用 for 循环?
【问题讨论】:
我知道这已经晚了 6 年,但创建零的 N 方阵更有效的方法是[[0]*N]*N
。
【参考方案1】:
您可以使用嵌套列表推导:
>>> 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
(非stdlib但很流行):
>>> 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
类型,这样比较混乱,但是比较少用。)
【讨论】:
如果您希望数字是连续整数而不是随机数怎么办? @FaCoffee,假设你想要 [A, B) 中的整数,你可以这样做(A + np.random.random((N,N)) * (B - A)).astype(int)
【参考方案2】:
使用 numpy 中的这个简单函数:
大小为 (4,4) 的数组,用数字 1-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]
【讨论】:
如何向这个数组添加无穷大?【参考方案3】:这是创建二维数组的方式:
k = np.random.random ([3,4]) * 10
k.astype(int)
【讨论】:
【参考方案4】:只需在您的列表理解中使用[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]]
【讨论】:
【参考方案5】:您可以使用列表推导。
[[random.random() for x in xrange(N)] for y in xrange(N)]
https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions
对于大型多维数组,我建议您使用 numpy。
【讨论】:
【参考方案6】:它可以在没有循环的情况下完成。试试这个简单的代码行来生成一个 2 × 3 的随机数矩阵,均值为 0,标准差为 1。
语法是:
import numpy
numpy.random.normal(mean, standard deviation, (rows,columns))
示例:
numpy.random.normal(0,1,(2,3))
【讨论】:
通常您希望随机数随机分布,而不是像正态分布那样围绕均值聚集。 所以尝试改为:“numpy.random.uniform(low=0.0, high=1.0, size=None)¶ [...] 样本均匀分布在半开区间 [low,高)”【参考方案7】:import numpy as np #np is shortcut of numpy
#Syntax : np.random.randint(the range for ex if you choose 100 then your array elements will be within the range 0 to 100, size = (row size, col size)
a = np.random.randint(100, size = (5,4)) #a is a variable(object)
print(a)
输出
[[49 81 57 96]
[64 95 54 53]
[63 77 68 74]
[96 38 29 41]
[13 39 99 43]]
【讨论】:
以上是关于使用随机数创建二维数组的简单方法(Python)的主要内容,如果未能解决你的问题,请参考以下文章