我知道如何创建一个充满随机数的numpy数组,例如:np.random.randint(0, 100, (5, 5))
。
但是如何创建一个填充了随机数的numpy数组,以便两个相邻单元格之间的差异为1或更小?
由于
答案 0 :(得分:4)
每一行可以相差1.因此生成一系列差异:
In [83]: H, W = 5, 5
In [84]: np.random.randint(-1, 2, size=(H,1))
Out[84]:
array([[ 1],
[-1],
[-1],
[-1],
[ 0]])
现在找到累积总和:
In [85]: np.add.accumulate([[ 1], [-1], [-1], [-1], [ 0]])
Out[85]:
array([[ 1],
[ 0],
[-1],
[-2],
[-2]])
同样,每列可以相差1.因此,再次生成一系列差异, 并找到累积总和:
In [86]: np.add.accumulate(np.random.randint(-1, 2, size=(1,W)), axis=1)
Out[86]: array([[1, 1, 2, 1, 1]])
现在将这两个累积总和加在一起。广播创建一个2D数组:
import numpy as np
H, W = 5, 5
x = np.add.accumulate(np.random.randint(-1, 2, size=(H,1)), axis=0)
y = np.add.accumulate(np.random.randint(-1, 2, size=(1,W)), axis=1)
out = x + y
print(out)
打印一个随机数组,例如
[[ 1 0 -1 0 -1]
[ 2 1 0 1 0]
[ 3 2 1 2 1]
[ 3 2 1 2 1]
[ 2 1 0 1 0]]
您可以向此数组添加常量,以生成具有相同属性的其他随机数组。