使用随机数创建2D数组的简单方法(Python)

use*_*242 11 python arrays random

我知道在Python中创建一个充满零的NxN数组的简单方法是:

[[0]*N for x in range(N)]
Run Code Online (Sandbox Code Playgroud)

但是,假设我想通过填充随机数来创建数组:

[[random.random()]*N for x in range(N)]
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为创建的每个随机数随后被复制N次,因此我的数组没有NxN唯一的随机数.

有没有办法在一行中执行此操作,而不使用for循环?

DSM*_*DSM 29

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

>>> 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]]
Run Code Online (Sandbox Code Playgroud)

或者使用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  ]])
Run Code Online (Sandbox Code Playgroud)

(PS这是一个好主意,养成说list你的意思list和保留arraynumpy ndarrays 的习惯.实际上有一个内置的array模块有自己的array类型,所以更混乱的东西,但它相对很少使用.)


Abh*_*pta 20

使用 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]
Run Code Online (Sandbox Code Playgroud)


小智 6

这是创建二维数组的方法:

k = np.random.random ([3,4]) * 10
k.astype(int)
Run Code Online (Sandbox Code Playgroud)